1. 策略模式
简单工厂模式的工厂类包含了必要的逻辑判断,根据客户端的选择动态的实例化相关的类。需要让客户端认识两个类,一个是super基类(例如加法操作的基类-运算符类),一个是Factory工厂类(返回基类,以便利用多态)
策略模式与简单工厂模式结合,客户端只需要一个Context对象(类似Factory工厂类),调用其函数(复合的super类对象调用多态函数),这样大大降低耦合性,在客户端连父类super类都可以隐藏
2. 单一职责原则
如果能够想到多于一个动机去改变一个类,那么这个就多于一个职责,最好考虑类的职责分离,从而易维护,易扩展,易复用,更加灵活
3. 开放-封闭原则
(类,模块,函数等等)应该可以扩展,但不可修改。对扩展开放,对更改封闭。考虑到为了需求得修改,尽量使当前类封闭,如果需要修改当前类,需要重新对类抽象。
4. 依赖倒转原则
抽象不应该依赖于细节,细节应该依赖于抽象。针对接口编程,不要对实现编程。有点像Restful API使得前后端分离,前后端只关注接口即可。
5. 装饰模式
Component定义了一个对象接口,可以给具体ConcreteComponent对象动态添加职责。
如果系统的新需求仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为,那么可以选用装饰模式,它把每个要装饰的功能放在单独的类中,并让这个类包装它所要修饰的对象。客户代码可以有选择的,有顺序的使用装饰功能包装的对象。
5. 代理模式
为其他对象提供一种代理以控制对这个对象的访问,即代理模式在访问对象时引入一定程度的间接性,从而可以附加多种用途。
代理类中会实例化原始类,并在相应接口中调用实例化原始对象的相应函数
6. 工厂方法模式
例: 左边是操作符类(Product), 加法类(ConcreteProduct),右边是Factory类(Creator), 返回ConcreteProduct实例的ConcreteCreator类
相比简单工厂模式,在添加新需求时更加符合开放-封闭原则,不用在Factory类中修改case分支。
概念:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类,简单工厂模式则在基类中用case分支实例化
7. 原型模式
this.MenberwiseClone()函数将创建一个新对象,然后将当前对象的非静态字段复制到该新对象,如果是值类型则逐位复制,引用则复制引用但不复制引用的对象,即指向同一个对象。
Clone使性能大幅提高,一般在初始化信息不变,clone是最好的方法,即隐藏了对象创建的过程,又省略初始化构造函数的执行过程。
注意深拷贝和浅拷贝问题,如果需要的类中实例化了其他复合类,需要在复合类中调用MenberwiseClone,然后将其他值字段复制过来
模板方法模式
所有重复的代码都应该上升到父类去。
当我们要完成在某一细节层次一致的一个过程,但其个别步骤在更详细层次上的实现可能不同,常考虑模板方法。