设计模式目录
设计模式-图片来源网络1. 设计模式的概念
- 是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。
- 目的就是确定通用解决方案、确立通用术语、让代码易修改和维护。
- 设计模式不是一成不变的,而是在不断发展中。
- 设计模式不是软件行业独有的,事实上,有很多行业有自己的设计模式。
2. 学习设计模式的好处
- 便于查看高级框架源码。
- 增加解决问题的能力。
- 不用重复发明轮子。
3. 设计模式的设计原则
设计原则SOLDIA原则:
-
单一职责原则(Single Responsibility Principle, SRP):
一个类或对象最好只负责一个功能领域的相应职责。
在程序设计中如果发现某个类承担着多种义务,可以进行拆分,若多个职责总同时发生改变则可以将它们封装到一个类中。
-
开放封闭原则(Open-Closed Principle, OCP):
一个软件实体(模块、多个类组成的局部结构、独立的类)应该对扩展开放,对修改关闭。
- 程序设计要保证平滑性的扩展性,尽量避免因为新增同类功能而修改已有实现,这样可以少产出回归问题。
- 抽象化是开闭原则的关键,可以通过它们定义系统的抽象层,再通过具体类进行扩展。需要修改系统行为,无须对抽象层动手,只需增加新的具体类来实现新的业务功能即可。
-
里氏代替原则(Liskov Substitution Principle, LSP):
这是面向对象的基本要素之一,所有引用基类(父类)的地方必须能够使用其子类的对象。
在软件开发中,一个基类对象替换成子类对象,程序不会产生任何错误和异常。
-
依赖倒置原则(Dependency Inversion Principle, DIP):
实体应该依赖于抽象而不是实现。
- 也就是说,在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。这一原则是降低产品代码之间的耦合。
- 在程序中尽量使用抽象层进行编程,而将具体类写在配置文件中,这样一来,如果系统行为发生变化,只需要对抽象层进行扩展,并修改配置文件,而无须修改原有系统的源代码,在不修改的情况下来扩展系统的功能,满足开闭原则的要求。
- 在实现依赖倒置原则时,则需要针对抽象层编程,而将具体类的对象通过依赖注入( DI)的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。常用的注入方式有三种,分别是:构造注入,设值注入(Setter注入)和接口注入。构造注入是指通过构造函数来传入具体类的对象,设值注入是指通过Setter方法来传入具体类的对象,而接口注入是指通过在接口中声明的业务方法来传入具体类的对象。这些方法在定义时使用的是抽象类型,在运行时再传入具体类型的对象,由子类对象来覆盖父类对象。
-
接口隔离原则(Interface Segregation Principle, ISP):
使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。
在进行类和接口之间的设计时,如果一个接口定义了太多方法,其子类可能面临两难,就只有部分方法对它有意义,这就破坏了程序的内聚性。
-
合成复用原则(Aggregate Reuse Principle, ARP):
尽量使用对象组合,而不是继承来达到复用的目的。
新对象通过委派调用已有对象的方法达到复用功能的目的。简言之:复用时要尽量使用组合/聚合关系(关联关系),少用继承。
-
迪米特法则/最小知识原则(LeastKnowledge Principle, LKP)
个软件实体应当尽可能少地与其他实体发生相互作用。这样系统模块功能相对独立,当其中某一个模块发生修改时,就会尽量少地影响其他模块,扩展会相对容易,降低系统的耦合度。
- 迪米特法则还有几种定义形式,包括:不要和“陌生人”说话、只与你的直接朋友通信等。
- 迪米特法则中对于一个对象,其朋友包括以下几类:
(1) 当前对象本身(this);
(2) 以参数形式传入到当前对象方法中的对象;
(3) 当前对象的成员对象;
(4) 如果当前对象的成员对象是一个集合,那么集合中的元素也都是朋友;
(5) 当前对象所创建的对象。- 迪米特法则运用到系统设计中应该注意几点:在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及;在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限;在类的设计上,只要有可能,一个类型应当设计成不变类;在对其他类的引用上,一个对象对其他对象的引用应当降到最低。
4. 设计模式的分类
GoF著作的23种设计模式,对于这23中设计模式GoF把它们分为三类:
23种设计模式
常用的设计模式有:
- 创建型模式:工厂方法模式、抽象工厂模式、建造者模式、单例模式。
- 结构性模式:适配器模式、代理模式。
- 行为型模式:策略模式、模板方法模式、观察者模式。
可以针对性的对这些模式去学习。
网友评论