创建型模式
工厂模式
应用实例:您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。而至于需要哪个牌子的汽车,就到哪个牌子的工厂。
抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
应用实例:一个班级只能有一个班主任。
建造者模式(Builder Pattern)
我里面有很多的方法,我可以根据这些方法构造出不同的东西
应用实例:去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的“套餐”
原型模式(Prototype Pattern)
就是根据一个基本的对象,去复制这个对象
一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。
结构型模式
适配器模式(Adapter Pattern)
作为两个不兼容的接口之间的桥梁。
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
就是我想使用你这个接口,但是你这个接口跟我想的不匹配,所以我要增加一个中间的东西去匹配这个接口
装饰器模式(Decorator Pattern)
允许向一个现有的对象添加新的功能,同时又不改变其结构。
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活
我可以给一个对象添加新的功能,但是不改变结构
我可以给头发染成绿色,但是本质我这还是头发,只不过改变了颜色
代理模式(Proxy Pattern)
一个类代表另一个类的功能。
就相当于我是一个老板,我不想去开会,我找一个人代表我去开会,这个人可以完全拥有我的权限
外观模式(Facade Pattern)
隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。
应用实例:去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。
桥接模式(Bridge Pattern)
用于把抽象化与实现化解耦,使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
对于两个独立变化的维度,使用桥接模式再适合不过了。
组合模式(Composite Pattern)
又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构
应用实例:
1、算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作数也可以是操作数、操作符和另一个操作数。
2、在JAVAAWT和SWING中,对于Button和Checkbox是树叶,Container是树枝。
享元模式(Flyweight Pattern)
主要用于减少创建对象的数量,以减少内存占用和提高性能
享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。
行为型模式
策略模式(Strategy Pattern)
一个类的行为或其算法可以在运行时更改。
应用实例:
1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略;
2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。
模板模式(Template Pattern)
一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
观察者模式(Observer Pattern)
当对象间存在一对多关系时,则使用观察者模式。比如,当一个对象被修改时,则会自动通知它的依赖对象。
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
应用实例:拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价;
迭代器模式(Iterator Pattern)
这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。
责任链模式(Chain of Responsibility Pattern)
为请求创建了一个接收者对象的链。
在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
命令模式(Command Pattern)
请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
备忘录模式(Memento Pattern)
保存一个对象的某个状态,以便在适当的时候恢复对象。
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
状态模式(State Pattern)
类的行为是基于它的状态改变的。
应用实例:
1、打篮球的时候运动员可以有正常状态、不正常状态和超常状态;
2、曾侯乙编钟中,‘钟是抽象接口’,'钟A’等是具体状态,'曾侯乙编钟’是具体环境(Context)。
访问者模式(Visitor Pattern)
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。
主要将数据结构与数据操作分离。
主要解决:稳定的数据结构和易变的操作耦合问题。
应用实例:您在朋友家做客,您是访问者,朋友接受您的访问,您通过朋友的描述,然后对朋友的描述做出一个判断,这就是访问者模式。
中介者模式(Mediator Pattern)
提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。
应用实例:中国加入WTO之前是各个国家相互贸易,结构复杂,现在是各个国家通过WTO来互相贸易;
解释器模式(Interpreter Pattern)
给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。
应用实例:编译器、运算表达式计算。