1、简单工厂模式
当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无需知道其创建细节。
比如需要加减乘除类,只需要传入正确的符号,就可以返回正确的类。
2、策略模式:
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化。
分析下定义,策略模式定义和封装了一系列的算法,它们是可以相互替换的,也就是说它们具有共性,而它们的共性就体现在策略接口的行为上,另外为了达到最后一句话的目的,也就是说让算法独立于使用它的客户而独立变化,我们需要让客户端依赖于策略接口。
涉及到三个角色:
环境角色:持有一个Strategy的角色
抽象策略角色:通过一个接口或者抽象类实现,给出所有具体策略类所需的接口。
具体策略角色:包装了相关的算法或行为。
即将具体依赖于实际不同情况的算法抽象出来,然后在具体类中去实现,当需要某种类时,即将相关参数传入简单工厂类,工厂给出具体的对象,对象调用具体的算法。
3、装饰模式
- Component为统一接口,也是装饰类和被装饰类的基本类型。
- ConcreteComponent为具体实现类,也是被装饰类,他本身是个具有一些功能的完整的类。
- Decorator是装饰类,实现了Component接口的同时还在内部维护了一个ConcreteComponent的实例,并可以通过构造函数初始化。而Decorator本身,通常采用默认实现,他的存在仅仅是一个声明:我要生产出一些用于装饰的子类了。而其子类才是赋有具体装饰效果的装饰产品类。
- ConcreteDecorator是具体的装饰产品类,每一种装饰产品都具有特定的装饰效果。可以通过构造器声明装饰哪种类型的ConcreteComponent,从而对其进行装饰。
装饰器的价值在于装饰,他并不影响被装饰类本身的核心功能。
4、代理模式
创建一个代理类,代理类使用被代理类构造,且调用被代理类的方法。
5、工厂方法模式
创建一个工厂抽象类,然后给每个具体方法创建一个子类,让子类决定具体创建哪一种对象,与简单工厂相比,工厂方法符合开放封闭原则。
6、原型模式
创建一个原型,给该原型创建一个clone函数,然后创建相似对象时,只要调用clone函数复制一个对象,然后修改细节即可。
7、模板方法模式
将不同实现的相同步骤写到同一个父类的方法中去,该方法同样包括不同步骤的虚方法,虚方法的在子类中完成具体实现。
8、外观模式
在外观类中集成了子系统中的类,并将需要调用的一系列方法,集中在外观类中,这样实现了对子系统中各类的隐藏。
9、建造者模式(不懂,再看看)
客户不需要知道对象具体的建造过程,只需要利用一个指挥者类来得到具体的对象就行了。
10、观察者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者同时监听某一主题对象。这个主题对象在发生变化时,会通知所有观察者对象。
11、状态模式
依据状态的转变来决定实例化哪个子类。
12、适配器模式
当两个类不同,但是接口方法相似时,可以使用一个子类包装另一个不同接口,使接口行为类似。
13、备忘录模式
设置一个备忘录类,当另一个类可能会改变时,将细节备份在备忘录类中,之后再用该备忘录类设置该类。
14、迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
实现要点:访问一个聚合对象的内容而无需暴露它的内部表示。
迭代多态:为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作。
迭代器的健壮性考虑:遍历的同时更改迭代器所在的集合结构,会导致问题。
15、单例模式
讲一个类的构造函数设为private,同时在public中写一个专门的方法,让该类只能存在一个类对象。
16命令模式
设一个commond类,子类实现具体不同commond方法,同时定义一个接收者类集成一个任务队列去控制这些命令。
适用性:
①:系统需要支持命令的撤消(undo)。命令对象可以把状态存储起来,等到客户端需要撤销命令所产生的效果时,可以调用undo()方法,把命令所产生的效果撤销掉。命令对象还可以提供redo()方法,以供客户端在需要时,再重新实施命令效果。
②:需要在不同的时间指定请求、将请求排队。一个命令对象和原先的请求发出者可以有不同的生命期。换言之,原先的请求发出者可能已经不在了,而命令对象本身仍然是活动的。
③:如果一个系统要将系统中所有的数据更新到日志里,以便在系统崩溃时,可以根据日志里读回所有的数据更新命令,重新调用Execute()方法一条一条执行这些命令,从而恢复系统在崩溃前所做的数据更新。
17 中介者模式
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。
18 享元模式
当一个程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑使用,享元模式是建立一个享元工厂,在需要具体对象时,若需要的类已经存在实例,则复用该实例。
19 访问者模式
1)访问者(Visitor)
访问者抽象接口,通过visit(Element)方法访问Element(数据结构),完成对Element的操作行为。
2)具体访问者(ConcreteVisitor)
访问者的具体实现类。
3)元素(Element),也就是被访问者
通过accept(Visitor)方法接受Visitor的访问。
4)具体元素(ConcreteElement)
元素的具体实现类。
5)对象结构(ObjectStructure)
拥有一组元素的组合对象。ObjectStructure本身也可以作为被访问者。
在element类中使用一个accept对象来接受一个访问者,同时访问者对该实例进行操作。这样实现了数据结构和具体操作的解耦。
在Objectstruct类中维护一个结构类实例的队列,并对其遍历。