Design Pattern 設計模式
設計模式六大原則
- 單一職責原則:不要存在多於一個導致類變更的原因。通俗的說,即一個類只負責一項職責。
- 里氏替換原則:子類可以擴展父類的功能,但不能更改父類內置的功能。
- 依賴倒置原則:高層模塊不應該應該依賴低層模塊,兩個都應該依賴其抽象,抽像不應該依賴細節,細節應該依賴抽象。
- 接口隔離原則:建立單一接口,不要建立龐大臃腫的接口,盡量細化接口,接口中的方法盡量少。
- 迪米特原則:一個類對象應該對其他對象保持最少的了解,盡量降低類與類之間的替換,例如使用中介的類來發生聯繫。
- 開閉原則:當軟件需要變化時,應該通過擴展軟件實體的行為來實現變化,而不是通過修改現有的代碼來實現變化(對擴展開放,對修改關閉的原則)。
遵循設計模式前面5大原則,以及使用23種設計模式的目的就是遵守開閉原則。
Ref:
24 種設計模式
創建者
- 单例:漫画:什么是单例模式? - 知乎
- 工厂:简单工厂模式、工厂方法模式和抽象工厂模式有何区别? - 知乎
- 建造者
- 套餐细分由多种餐点组成,鸡肉+饭可以组合鸡肉饭,鸡肉+油可以组合炸鸡
- 何时使用:一些基本部件不会变,而其组合经常变化的时候
- 使用场景: 1、需要生成的对象具有复杂的内部结构。 2、需要生成的对象内部属性本身相互依赖。
- 注意事项:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序
結構型
- 代理
- 以代理人&代理的动作为主体
- 例如代理人模拟代理了买票这个动作行为
- 行为的再封装,起到了保护目标对象的作用,并且降低耦合度
- 裝飾器
- 如果A想要使用B的特性,一般会使用继承方式,但为了扩展子类而继承,容易造成子类膨胀,耦合度高
- 真实世界类比:
- 穿衣服是使用装饰的一个例子。觉得冷时,你可以穿一件毛衣。如果穿毛衣还觉得冷,你可以再套上一件夹克。如果遇到下雨,你还可以再穿一件雨衣。
- 所有这些衣物都 “扩展” 了你的基本行为,但它们并不是你的一部分,如果你不再需要某件衣物,可以方便地随时脱掉。
- 继承的特性:
- 继承是静态的。 你无法在运行时更改已有对象的行为,只能使用由不同子类创建的对象来替代当前的整个对象。
- 子类只能有一个父类。大部分编程语言不允许一个类同时继承多个类的行为。
- 组合:一个对象可以使用多个类的行为,包含多个指向其他对象的引用,并将各种工作委派给引用对象。
- 使用场景: 1、在不想增加很多子类的情况下,扩展类的功能。 2、动态增加功能,动态撤销
行為型
- 模板
- 使用场景: 1、有多个子类共有的方法,且逻辑相同。 2、重要的、复杂的方法,可以考虑作为模板方法。
- 注意事项:为防止恶意操作,一般模板方法都加上 final 关键词。
- 策略:
- 以行为切分,将行为模塊化,而非具体对象
- 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为
- 例如今天需求要写不同动物,但这个需求中的不同动物区别只在於行为叫声的不同,除了用继承方法实现(以具体对象切分,容易造成耦合度高,不容易修改), 策略模式则是以行为切分,再以不同动物去execute分别对应的行为(方法)
Reference
Overview:
Design Pattern In Java: