设计模式学习总结一原则及创建型模式
1.设计模式目标:松耦合,模块化,应对需求变化,使软件可维护、可扩展、可复用、灵活性好。
2.实现手段:抽象、封装、继承、多态、反射、委托等。
3.设计模式原则:
DIP(Dependency-Inversion Principles)依赖倒置原则:(面向抽象/接口编程,细节依赖于抽象,高层、底层依赖于接口;例如CPU、内存条、硬盘与主板间面向接口实现使PC组装很容易);
OCP(Open-Closed Principle) 开放-封闭原则:(对扩展开放,对修改关闭);
LSP(Liskov Substitution Principle) 替换原则:继续思想的基础子类替换父类原则;
SRP(Single Resposibility Principle) 单一职责原则:单一职责原则(只有一个使类变化的原因)
LoD (Law of Demeter)迪米特法则; 即最少知识原则。一个对象应当对其他对象有尽可能少的了解。只和最直接的类交互,对第三方可以通过转达交互,从而减少对象间的耦合性。
CARP(Composite/Aggregate Reuse Principle)合成/聚合复用原则:要尽量使用合成/聚合,尽量不要使用继承。
ISP(Interface Insolation Principle)接口隔离原则:一个类对另外一个类的依赖性应当是建立在最小的接口上的。使用多个专门的接口比使用单一的总接口要好。
4.UML类图间的关系:
5.创建型模式总结:
- 简单工厂模式组成:抽象产品角色(定义用户可访问产品的接口,有具体产品类实现);具体产品角色(实现抽象产品所定义的接口,实例化产品对象);简单工厂类(包含一个静态的创建产品的方法,封装创建产品的判断逻辑,由传入的参数,为客户生成有抽象产品指针指向的具体产品对象,对客户隐藏具体产品类信息)。应对新增产品的变化,简单工厂模式除了要新增具体产品类外还有修改产品创建方法的逻辑(增加case或if判断),破坏了开闭原则,因此不被归在23中模式中。实际实现是可通过反射和配置文件方式去掉生成具体产品对象时繁杂的逻辑判断操作。
- 工厂方法模式组成:抽象产品角色、具体产品角色、抽象工厂角色(定义了创建产品的接口,具体产品的创建过程由具体工厂角色负责);具体工厂角色:创建具体产品对象。工厂方法模式将产品对象的创建分散到具体工厂中,应对新增产品的变化,需要增加具体产品类和具体工厂类;简单工厂要修改创建产品的逻辑被新增一个具体工厂类实现,符合开闭原则,客户端要知道几个具体产品工厂来创建抽象产品指针指向的具体产品对象,相当于通过具体工厂隐藏了具体产品类的信息。
- 抽象工厂模式组成:抽象工厂角色、具体工厂角色、多个抽象产品角色,多个具体产品角色。感觉抽象工厂与工厂方法类似,只是要创建的为至少两类抽象产品的产品族,在实现上对应抽象工厂内应包含至少两类抽象产品指针。
- 单例模式组成:一个构造函数为私有的产品类。只返回一个实例对象,由编译时静态初始化的懒汉模式和第一次运行时动态初始化的饿汉模式,后者在实现上要注意多线程同步问题,注意用双重锁定解决。
- 原型模式:由当前对象直接clone一个对象,避免该对象的再次初始化。
- 建造者模式组成:抽象建造者(定义了产品创建的规范,由具体创建者实现)具体建造者角色(封装了产品部件的组装细节)指导者角色(调用具体建造者角色,按稳定的顺序构造产品),复杂产品角色(由多个部件组成的复杂产品角色,部件内部可能会变化,但部件间的组装顺序不变)