首页 > 代码库 > 设计模式

设计模式

设计模式概念:是一套被反复使用、多数人知晓、经过分类编目的、代码设计经验的总结,使用设计模式是为了可充用代码、让代码更容易被他人理解、保证代码的可靠性。

简言之,它是前人编写代码过程中的总结,是一种编写代码的经验,熟知其中的方法和概念对软件的结构组成有很多好处和便利。

         设计模式分为三大类~~

         创建型模式有:抽象工厂模式、原型模式、单例模式、建造者模式、工厂方法模式。

         结构型模式有:、组合模式、享元模式、适配器模式、桥接模式装饰模式、外观模式、代理模式。

         行为型模式有:板方法模式、迭代器模式、中介者模式、解释器模式、模备忘录模式、观察者模式、、命令模式、策略模式、访问者模式。

 

工厂方法模式

建立一个工厂类,顾名思义,以工厂的方式成批创建实例,不再需要单独去new一个实例,而是通过工厂这个类来完成这一工作。(创建实例模块化)

其中有

  普通工厂模式:建立工厂类,对实现了同一接口的一些类创建实例。

  多个工厂方法模式:提供多个工厂方法,分别创建对象

  静态工厂方法模式:将工厂方法模式的方法设置为静态,不需要创建实例,可直接调用。

 

抽象工厂模式

原本工厂方法模式存在问题是:类的创建依赖工厂类,想要拓展程序,必须对工厂类进行修改。为了解决这个问题,就用此模式,创建多个工厂,当需要增加新的功能,直接增加新的工厂类。

 

 

单例模式

在整个过程,只需要一个实例的存在。

应对问题:

1、类的创建频繁,节省资源

2、少写new操作符,降低内存的使用频率

3、某些类的确只需要一个,创建多个将会出错,也是保证权限的唯一性。

 

 

建造者模式

它与工厂类有着对比,工厂类模式提供的是单个类的模式,而建造者模式是多个产品集中管理,各个组合,来创建复合对象,其拥有不同的属性。

 

原型模式

将一个对象作为原型,然后的操作是:可对其进行复制(克隆),产生一个和原对象类似的新对象。

其中存在

浅复制:复制对象后,基本数据类型的变量都会重新创建,但是引用类型,还是指向的是原对象(并没有复制)

深复制:完全彻底复制,将引用类型也重新创建了。

 

适配器模式

一种转换方式,因为接口不匹配而造成的类的兼容性问题,用此方法可将某个类的接口转换成所要的另一个接口表示。

 

装饰模式

给一个对象添加新的功能

应对问题:

  1、动态地为一个对象增加新功能,且能撤销

  2、扩展一个类的功能

 

代理模式

多一个代理类出来,为原对象进行操作。能帮助原对象完成一些他自己完成不了的功能,相当于一个帮助者。此模式,可以将功能划分更清晰,有助于后期维护。

 

外观模式

 

 

桥接模式:一个具体的对象有两个维度,分别定义每个维度的抽象方法,并在一个维度的抽象类(Abstract)中将另一个维度的抽象类(Implementor)作为其的一个成员变量,在该类的具体实现方法(RefinedAbstract)中就可以调用另一个类的具体实现方法(ConcreteImplementor),用关联关系替代继承关系。

         模式的角色有:Abstraction(抽象类)、RefinedAbstract(扩充抽象类)、

Implementor(实现类接口)、ConcreteImplementor(具体实现类)

         组合模式:将多个对象组合在一起,然后用树形结构来表示整体与部分的关系。提供一个抽象的公共父类(Component),该父类有两个子类,一个类(Leaf)只实现父类中的操作方法(Operation),另一个类(Composite)则实现全部的方法。

         模式的角色有:Component(抽象构件)、Leaf(叶子构件)、Composite(容器构件)

 

         享元模式:利用共享技术,将一些细小的对象重复使用,不占用过多的资源。

         模式的角色有:Flyweight(抽象享元类)、ConcreteFlyweight(具体享元类)、

UnsharedConcreteFlyweight(非共享具体享元类)、Flyweightfactory(享元工厂类)

 

 

         职责链模式:将多个能够响应某一请求的类,从低到高串成一条链,然后将请求沿着这条链传递,直到某一个类作出响应为止。

         模式的角色有:Handle(抽象处理者)、ConcreteHandler(具体处理者)、Client(客户类)

         命令模式:将一个请求的实现、发起、响应的过程分别封装,降低了系统之间的耦合度。

         模式的角色有:Command(抽象命令类)、ConcreteCommand(具体命令类)、

Invoker(调用者)、Receiver(接受者)、Client(客户类)

         解释器模式:定义语言的文法,并且建立一个解释器来解释该语言中的句子。

         模式中的角色有:AbstractExpression(抽象表达式)、TerminalExpression(终结符表达式)、

NonterminaExpression(非终结符表达式)、Context(环境类)、Client(客户类)

         迭代器模式:将聚合对象分为两个部分:存储内部数据、遍历内部数据,该模式就是通过遍历的类来访问数据,这样不需要知道内部数据的表示情况。

         模式的角色有:Iterator(抽象迭代器)、ConcreteIterator(具体迭代器)、

Aggregate(抽象聚合类)、ConcreteAggregate(具体聚合类)

         中介者模式:对象与对象之间的交互不直接进行,而是通过中介者来实现交互。中介者将对象之间的交互抽取出来,大大减少对象间的关系数量。

         模式的角色有:Mediator(抽象中介者)、ConcreteMediator(具体终结者)、

Colleague(抽象同事类)、ConcreteColleague(具体同事类)

         备忘录模式:在不破坏封装的前提下,将一个对象完整地保存在另一个对象中,并在需要还原的时候能够恢复到原先的状态。

         模式中的角色有:Originator(原发器)、Memento(备忘录)、Caretaker(负责人)

         观察者模式:多个对象依赖于一个目标对象,当该目标对象发生改变时,多个对象也会随之发生改变。

         模式的角色有:Subject(目标)、ConcreteSubject(具体目标)、Observer(观察者)、

ConcreteObserver(具体观察者)

         状态模式:当对象的状态改变后,对象的行为也随之改变,就像改变了类一样。在类的定义中添加一个状态,对应不同的状态,类中的方法有不同的响应。

         模式的角色有:Context(环境类)、State(抽象状态类)、ConcreteState(具体状态类)

         策略模式:实现目的的方法有多种,将每一种方法封装成一个类,它们继承同一个父类,在需要时可以相互替换。

         模式的角色有:Context(环境类)、Strategy(抽象策略类)、ConcreteStrategy(具体策略类)

         模板方法模式:父类中定义了某一事件的具体操作步骤,并实现了部分或全部的方法,但在子类中,可以重定义父类中的方法,使之表达出不同的意思。

         模式的角色有:AbstractClass(抽象类)、ConcreteClass(具体子类)

         访问者模式:将一个对象中的每一个元素抽取出来,单独的作为一个类,并继承一个公共的父类,然后定义一个抽象的操作,提供对每一个元素的操作方法,在子类中实现具体的操作方法,这样就能在不改变元素类的前提下,通过添加新的操作方法子类实现对元素的新的操作。

         模式的角色有:Vistor(抽象访问者)、ConcreteVistor(具体访问者)、Element(抽象元素)、ConcreteElement(具体元素)、ObjectStructure(对象结构)

设计模式