23种设计模式(GoF23)
设计模式的本质:
面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。
创建型模式:
单列模式、工厂模式、抽象工厂模式、建造者模式、原型模式。
结构型模式:
适配器模式、桥梁模式、装饰模式、组合模式、外观模式、享用模式、代理模式
行为型模式:
模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
OOP七大原则:
开闭原则: 对扩展开放,对修改关闭
里氏替换原则:继承必须确保超类所拥有的性质在子类中依然成立。
依赖倒置原则:要面向接口编程,不要面向实现编程。
单一职责原则:控制类的粒度大小、将对象解耦、提高其内聚性。
接口隔离原则:要为各个类建立它们需要的专用接口。
迪米特法则: 要与你的直接朋友交谈,不限“陌生人”说话。
合成复用原则:尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
工厂模式:
核心本质:
实例化对象不使用new,用工厂模式代替。
将选择实现类,创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
根据设计原则:使用工厂方法模式
根据实际业务:使用简单工厂模式
工厂模式:
简单工厂模式:
用来生产用一等级结构中的任意产品。
工厂方法模式:
用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂模式:
围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂
简单工厂模式(静态工厂模式):
需要什么就从工厂中get,不需要了解底层。
缺点:增加一个新的产品,需要改变代码。
public class CarFactory{
public static Car getCar(String car){
if(car.equals("五菱")){
return new Wuling();
}else if(car.equals("特斯拉")){
return new TesLa();
}
}
}
工厂方法模式:
每一个车实现Car,每一个车都有一个车工厂,每个车的车工厂实现CarFactory。
缺点:在简单工厂上,结构复杂度增加了,代码复杂度增加了,编程复杂度增加了,管理上的复杂度增加了。
抽象工厂模式:
抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体 的类。
优点:
具体产品在应用层的代码隔离,无需关心创建的细节。
将一个系列的产品统一到一起创建。
缺点:
规定了所有可能被创建的产品集合,产品族中扩展新的产品困难。
增加了系统的抽象性和理解难度。
建造者模式:
定义:讲一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
作用:在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。
优点:
产品的建造和表示分离,实现了解耦。使用建造者模式可以使客户端不必知道产品内部组成的细节。
将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰。
具体的建造者类之间是相互独立的,这有利于系统的扩展。增加新的具体建造者无需修改原有类库的代码。
缺点:
建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则
不适合使用建造者模式,因此其使用范围受到一定的限制。
步骤:
创建一个抽象类Builder,其中写实现一个产品的具体步骤。
创建Product类继承Builder,继承Builder类中的步骤,写get,set方法。
Worker类,具体实现Product中的方法。
Director类,负责指挥构建一个工程,指挥出步骤。
原型模式(Prototype):