24种设计模式
Factory Pattern(工厂模式):1. 创建对象的接口,封装对象的创建;2. 使具体化类的工作延迟到子类中。(维护一类对象)
AbstractFactory Pattern(抽象工厂 模型):该模式将一组对象的创建封装到一个用于创建对象的类中。(解决的问题:要创建一组或者相互依赖的对象)。
Singleton Pattern(单例模式):该模式在面向纯粹的面向对象的范式中用于创建唯一的实例,值得注意的是Singleton不能被实例化,因此将其构造函数声明为protected或private类型。Singleton Pattern经常与Factory Pattern结合使用,因为Factory对象只能有一个。
Builder Pattern(创建者模式):将一个复杂的对象的构建与它的表示分离,使得同样的构建构成可以创建不同的表示。如建筑师画图纸,而工人建造房屋。
Prototype Pattern(原型模式):提供一个通过已存在对象进行新对象创建的接口(clone)。(浅拷贝和深拷贝)
Bridge Pattern(桥梁模式):将抽象部分与实现部分分开实现,使他们都可以独立地变化,并使用组合的方式将多维度的抽象方法联系在一起。比如咖啡分小杯、中杯、大杯以及加奶和不加奶,则抽象部分为:小杯、中杯、大杯,行为为:加奶和不加奶。
Adapter Pattern(适配器模式):适配就是由“源”到“目标”的适配,而当中链接两者的关系就是适配器。它负责把“源”过度到“目标”。将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式分为两种:① 面向类的设计模式;② 面向对象的设计模式。
① 面向类的适配器:该模式使用继承和接口实现的方式复用需要适配器的类。
② 面向对象的适配器:该模式使用组合的方式实现需要复用的类。
Decorator模式(装饰模式):动态地给一个对象添加一些额外的职责。
Composite模式(组合模式):将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。
Flyweight模式(享元模式):使用共享技术实现元素的共享。
Facade模式(外观模式):要求一个子系统的外部与其内部的通信必须通过一个统一的Facade对象进行。Facade模式提供一个高层次的接口,使得子系统更易于使用。
Proxy模式(代理模式):不通过要操作对象本身去操作这个对象,而是通过一个能控制这个对象的对象(代理)去操作这个对象。
Template模式(模板模式):逻辑框架相同,但是对某一个业务逻辑(算法实现)在不同的对象中有不同的实现方式。Template采用继承的方式实现这一点(strategy模式采用组合的方式去解决)。
Strategy模式(策略模式):解决与Template模式相同(类似)的问题。Strategy模式将逻辑(算法)封装到一个类中,通过组合的方式将具体算法的实现在组合对象中实现,通过委托的方式将抽象接口的实现委托给组合对象实现。
State模式(状态模式):人或事物有不同的状态,每种状态又有其特定的表现,在这些状态下又使一个状态转移到另一个不同的状态。
Observer模式(观察者模式):Observer模式定义对象间的一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。(如视图-文档)
Memento模式(备忘模式):在不破坏封装性的情况下,捕获并保存一个类的内部状态,可以利用该保存的状态实施恢复操作。
Mediator模式(中介者模式):用一个中介对象来封装一系列关于对象交互行为。如MVC中的Controller。
Command模式(命令模式):命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。
Visitor模式(访问者模式):在不改变原有类结构的基础上不断添加新的功能。缺点:破坏了封装性;Concretement扩展困难:每添加一个Element的子类,就要修改Visitor的接口,使得可以提供给这个新增加的子类的访问机制。
Chain of Responsibility模式(职责链模式):Chain of Responsibility(CoR) 是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合,唯一共同点是在他们之间传递request. 也就是说,来了一个请求,A类先处理,如果没有处理,就传递到B类处理,如果没有处理,就传递到C类处理,就这样象一个链条(chain)一样传递下去。
Iterator模式(迭代模式):提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。具体应用容器类(Vector、Set等)。
Interpreter模式(解释器模式):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。实例应用:正则表达式。
最后:各个模式的使用不一定是相互独立,而是可以融合。