设计模式——结构型

来源:互联网 发布:保定seo服务 编辑:程序博客网 时间:2024/05/14 09:14

    结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),

或者通过组合一些对象,从而实现新的功能(对象结构型模式)。

 

常见的结构型模式有七种:

  • Adapter适配器模式
  • Composite组合模式
  • Facade外观模式
  • Decorator装饰模式
  • Bridge桥接模式
  • Flyweight享元模式
  • Proxy代理模式。

 

我们首先整体了解一下七种模式:

计算机生成了可选文字: 通过统·性便于客户使川和扩展让接口不同的类可以协同工作将一个类的接口转换成客户希望的另外一个接口.统一任何使用了基本对象的地方都可以使用组合对象将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性.’已对一些对象进行抽象和提取,然后提供给客厂’使用,这样既便T.客户使用,也便于对底层的被概括的对象进行小’展和维护。匕结哟通过外观对象,为子系统间提供一个单一而简单的屏蔽概括Facade(外观)为子系统中的一组接口提供一个一致的界面,使这一子系统更加容易使用。通过分离可以解藕关联、增加各部分的独立性等等将抽象和实现分离,使他们可以独介.的变化分禺Decorator(装饰器)劝态的给对象增加·些职责FIyweight(亨元)运用共享技术有效的支持大量细粒度对象。proxv(代理)为其它对象提供一种代理以控制对这种对象的访问。

Adapter适配器模式

计算机生成了可选文字: 鹦Talget今只equest()AdaPterAdaPtee....~~~~一今Request()今speci行cRequest()通过在内部包装一个AdaPter对象,把源接口转换成目标接口。

解决的问题:新环境要求的接口是现存对象所不满足的,此时我们可以通过添加一层Adapter对现有的对象加入

一些接口,使其适应新的应用环境。

 

举例:笔记本电源适配器

 

Composite组合模式

计算机生成了可选文字: Component今Add()今Remove()今0Isplay()CompositeLe日f今Display()似dd()nU!今Remove今Display(

解决的问题:

         解决客户程序与复杂对象容器的解耦,一类具有“容器特征”的对象——即他们在充当对象的同时,又是其他对象的容器的情况,通过继承统一的接口,我们可以将容器对象及其子对象看成同一类对象使用,以减少

对象使用中的复杂度。

 

举例:公司分支管理

 

Facade外观模式

计算机生成了可选文字: 粤Facde外观类知道那些子类负责处理请求,将客户的请求代理给适当的子系统对象Facade}今MethodA()今Methods()Subsystemonel}SubsystemTwo}1SubsystemThree今Methodone()}}今Method彻。()}}今Metho盯hree()SubsystemClasses子系统类集合实现子系统的功能,处理Facde对象指派的任务。注意子类中没有fecade的任何信息,既没有对Facade对象的引用

解决的问题:

简化接口,将客户程序对子对象的调用与子对象的变化分离。

 

举例:10086查询

 

Decorator装饰模式

计算机生成了可选文字: co呷onent是定义一个对象接口,可以给这些对象动态地添加职责......月.月.......~-~一Component今Operation()ConcreatCompenentDeC0rstor今operation()今operation()ConcreatComponent是定义了一个具体的对象,也可以给这ConCretDeC0r日torA补addedstate:stringCDnCretDeC0ratDrB个对象添加一个职责。今opname()全印塑q.,、丫甲a008OD8na讥0几)

解决的问题:

        在稳定接口的前提下为对象扩展功能,主要是解决用继承的方式为对象扩展大量功能而造成的子对象数量膨胀的问题

 

举例:一幅画,可以直接挂到墙上,也可以加上框架和镶上玻璃后,再挂到墙上。

 

Bridge桥接模式

计算机生成了可选文字: 抽象实现六卜straction今operation()吵竺型里日,---一‘习今operatIonImP()Re石nedA比tr8CtionConcretel叩IementorAConcretelmplementorB今operation()

解决的问题:

      分离接口(抽象)与其实现,当某个类型具有两个或两个以上的变化点,通过以继承接口的方式隔离变化,以减少因变化带来的代码的修改量。

 

举例:电灯开关

 

Flyweight享元模式

计算机生成了可选文字: 一个亨元工厂,用来创建并管理「扮忱ight对象。它主要用来确保台理地共享「咖eight,当用户请求一个Fl卿eight时,FlyweightFactory对象提供一个已创建的实例或者创建一个(如果不存在的话)器黝一’“一”‘一’'-所有具体亨元类的超类或者接口,F扮蛇lght可以接受并作用于外部1大态。F咖e1ghFactory今Get「l洲eight()一愁阴eights粤ConcreteFlyweight今OPe「盆幻n()UnsharedConcreteF扮陇叼ht今operation()t“一、、继承F!yweight超类或实现Flywelght接口,并为内部1犬态增加储存空间。指那些不需要共享Flyweight子类,因Flyweight接口共享但它并不强制共享的的为成为可能

解决的问题:主要是解决由于相同对象数量过大而造成系统内存开销过大的问题。

 

举例:同时设计不同类的网站。

 

Proxy代理模式

计算机生成了可选文字: O送礼物今送洋娃娃(》今送鲜询)今洪巧克力()代理追求者今送洋娃娃()今送鲜花()今法巧克力()今送洋娃娃0今送鲜花()今送巧克力O

解决的问题:解决直接访问某些对象是出现的问题

举例:中介公司