设计模式总结

(1)简单工厂模式:

设置一个接口,专门定义一个工厂类负责创建接口类的实例,通过工厂类判断输入的条件,从而选择相应的接口实现类进行实例化,然后进行输出。但是由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都受到影响。Jdk类库广泛使用简单工厂类。

(2)工厂方法模式:

是简单工厂模式的延伸。工厂父类负责定义创建产品对象的公共接口,而工厂子类负责生成具体的产品对象,使产品类的实例化操作延迟到工厂子类中完成。例:电视机工厂接口类调用海尔电视机实现类,电视机接口类调用海尔电视机实现类。海尔电视机实现类创建海尔电视机实体。

(3)抽象工厂类:

抽象工厂是工厂方法的泛化版。每个抽象工厂可以生产多个具体产品。提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。分为四个角色:抽象工厂类,具体工厂类,抽象产品类,具体产品类。例:抽象工厂接口类a调用具体工厂实现类a1,抽象产品接口b类由具体实现类b1实现,抽象产品接口c类由具体实现类c1实现,a1创建了由b1c1

(4)建造者模式:

目的是为了创建一个复杂的对象。建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。包含四个角色:抽象建造者(接口),具体建造者(实现类),产品角色,指挥者。指挥者将要创建的产品传给抽象建造者,产品角色在抽象建造者中实例化,抽象建造者由具体建造者实现,具体建造者将完成品返回。

(5)原型模式

当需要创建大量相同或者相似对象时,可以通过对一个已有对象的复制获取更多对象。分为深克隆和浅克隆。定义:是一种对象创建型模型,用原型实例指定创建对象的种类,并且同构复制这些原型创建新的对象。角色:抽象原型类,具体原型类,客户类。浅克隆,是取原来的对象,深克隆是将原来的对象复制过来。

(6)单例模式

实现某个对象在整个系统中只能存在一个。定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。角色:单例类。单例类包含一个静态私有成员变量,一个共有静态方法,其他类不能new 单例类。

(7)适配器模式

定义:将一个接口转换为客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器。适配器模式既是类结构型模型,也可以作为对象结构型模型。角色:目标抽象类,适配器类,适配者类,客户类。目标抽象类接口由适配器实现类实现,适配器类继承适配者类,并将适配者中的函数调用到自己的函数中,来实现适配。

(8)桥接模式

使俩个或多个维度进行动态的组合。定义:将抽象部分与它的实现部分分离,使他们都可以独立变化,是一种对象结构模型。角色:抽象类,扩充抽象类,实现类接口,具体实现类。扩充抽象类继承抽象类,具体实现类实现实现类接口。抽象类将实现类接口实例化。实现接口的调用。两种维度融合在一起。

(9)组合模式

解决容器和叶子之间的关系。定义:组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(叶子对象)和组合对象(容器对象)的使用具有一致性。组合模式又可以称为“整体-部分”模式,属于对象的结构模式,它将对昂组织到树形结构中可以用来描述整体与部分的关系。角色:抽象构件,叶子构件,容器构件,客户类。叶子构件和容器构件都继承抽象构件(抽象类)。在容器构件中定义抽象构件类型的队列,和对队列操作的函数。队列中可添加叶子构件或容器构件。

(10)装饰模式

代替继承的用于扩展系统功能的技术。定义:动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。角色:抽象构件,具体构件,抽象装饰类,具体装饰类。抽象构件(接口)由具体构件和抽象装饰类实现,具体装饰类继承抽象装饰类。在抽象装饰类内定义接口,具体装饰类继承了接口,用接口调用具体构件。

(11)外观模式

引入一个外观角色简化客户端与子系统之间的操作。定义:外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模型。角色:外观角色,子系统角色。外观类依赖于子系统,外观类创建子系统的实例,并在外观类函数中统一调用各个子系统的函数。

(12)享元模式

实现相同或相似细粒度对象的复用。定义:运用共享技术有效的支持大量细粒度对象的复用。角色:抽象享元类,具体享元类,非共享具体享元类,享元工厂类。抽象享元类接口,由具体享元类和非共享具体享元类实现,享元工厂类调用抽象享元类接口。

(13)代理模式

实现对象的间接访问。定义:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。角色:抽象主题角色,代理主题角色,真实主题角色。抽象主题接口由代理主题和真实主题实现。客户访问代理主题,代理主题将真实主题实例化并调用其中的函数。

(14)职责连模式

链状处理请求。定义:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,知道有对象处理它为止。角色:抽象处理者,具体处理者,客户类。抽象处理者(抽象类)自调用,设置传递给上一级处理者的函数。

(15)命令模式

请求发送者与请求接收者解耦,请求发送者通过命令对象间接引用接收者。角色:抽象命令类,具体命令类,调用者,接收者,客户类。调用者调用抽象命令,具体命令继承抽象命令,接收者是具体的命令执行,具体命令实现类调用接收者中的函数。

(16)解释器模式

描述如何构成简单的解释器。角色:抽象表达式,终结符表达式,非终结符表达式,环境类,客户类。客户类依赖环境类和抽象表达式类,终结符表达式和非终结符表达式实现抽象表达式。

(17)迭代器模式

用于对一个聚合对象进行遍历。角色:抽象迭代器,具体迭代器,抽象聚合类,具体聚合类。通过接口和实现类进行连接。

(18)中介者模式

简单化复杂的交互模式。角色:抽象中介者(接口),具体中介者(实现类),抽象同事类(接口),具体同事类(实现类)。 抽象中介者依赖抽象同事类,抽象同事类依赖具体中介者。

(19)备忘录模式

提供撤销机制。角色:原发器,备忘录,负责人。原发器用来创建备忘录,负责人将备忘录的信息保存下来,拒绝其他类的访问。

(20)观察者模式

一个条件改变导致另一个条件改变。角色:目标(抽象类),具体目标(继承类),观察者(接口),具体观察者(实现类)。观察者依赖目标,具体目标变化通过中间层导致具体观察者的变化。

(21)状态模式

外部改变导致内部的改变。角色:环境类,抽象状态类,具体状态类。环境类依赖抽象状态类,同时判别状态。进行操作后会将新的状态实例化到环境类。

(22)策略模式

将每个算法封装在一个称为具体策略的类中,同时为其提供统一的抽象策略类,使用这些算法完成某一业务功能的称为环境类。

(23)模板方法模式

只存在父类和子类之间的继承关系。将一些复杂流程封装在一系列基本方法中,在抽象弗雷中提供一个模板方法的方法来定义这些基本方法的执行次序,通过子类覆盖某些步骤,得到不同的结果。

(24)访问者模式

包含访问者和被访问者两个主要部分,被访问的元素有不同的类型,且不同的访问者可以对其进行不同的访问操作。

 

posted @ 2017-04-02 19:45  键盘已坏  阅读(121)  评论(0编辑  收藏  举报