为什么要学习模式?
设计模式减少了对象之间的依赖性,降低耦合程度,让系统更易于扩展,提高了对象的可复用性,
设计模式的优势:
1、复用解决方案,复用公认的设计,能学习其他的经验,避免重蹈覆辙。
2、确立通用术语,在分析和设计阶段提供了共同的基准点 ,用于交流和协作的共同词汇和对问题共识
3、提供更高层次的视角
4、使用更优秀的设计
5、提高可维护性
6、发现巨型继承层次结构的替代方案。
设计模式的基本原则:
1、开闭原则
2、从背景设计原则,在设计各部分呈现细节之前,先创建总体的概念,再逐步复杂化,不必过早关注细节
3、依赖倒置原则,
4、替换原则
5、封装变化原则,一个类不要封装两个变化的事物,除非它们明确耦合一起,不然会降低内聚性,变化之间的耦合也无法松散。
工厂模式
提供一个创建一系列相关或者相依赖的对象接口,不须指定它们的具体类型。
服务模式
定义一个服务的抽象接口,把实现延迟到子类中,让子类可以在不修改服务的抽象接口的情况下就可以重新定义它特定的具体实现。
访问者模式
表示一个作用于某个对象结构中的各个元素的操作,让你可以在不修改各元素的类的前提下,定义作用于这些元素的新操作(方法)
在需求发生改变时,某些类层次结构中经常需要增加新的操作(方法),若在基类中更改,则会给子类带来繁重的变更负担(或者破坏原有的设计)
Visitor:为ObjectStructure中的每一个类生命一个Visit操作,该操作的特征和名字标识了发送Visit请求给Element类,让Visitor可以确定正在被访问的Element集体类型,因此Visitor可以通过该Element的特定接口直接访问它
ConcreteVisitor:实现每一个由Visitor声明的操作。
Element:定义一个Accept操作,以一个Visitor作为参数
ConcreteElement:实现Accept操作,该操作以一个Visitor作为参数
ObjectStructure:能枚举它的元素;提供一个高层接口允许Visitor访问它的元素;也可以是一个集合