设计模式—详解篇—结构型模式

2.  Façade外观模式

为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

看图说话:

 

 

 

    此模式的具体体在:MVCservice层中某个servicedao层的封装,JDBC对各个数据库的封装。

3.  Proxy代理模式

为其他对象提供一种代理,以控制对这个对象的访问。

看图说话:

 

 

    代理对象中保存被代理对象的引用,在调用被代理对象过程中可以附加操作。

    使用场合:远程代理;虚拟代理(异步调用被代理对象的方法);安全代理;只能指引。不管什么场合都要是要在被代理对象上附加操作。

4.  Adapter适配器模式

将一个类的接口转换成客户希望的另外一个接口。Adaper模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

看图说话:


 

        适配器通过继承目标对象并隐含被适配者的真正实现来达到目标操作与被适配者

的兼容合作。

5.  Composite组合模式

        将对象组合成树形结构以表示“部分—整体”的层次结构。组合模式使得用户对单

个对象和组合对象的使用具有一致性。

    看图说话:

 
           
 

实例应用:JUnitTest接口中及TestCaseTestSuite子类的结构即为组合模式。

适用于树形结构,集合结构。

实现方式有两种:透明方式与安全方式

透明方式:上图的结构为透明方式,即在Component中管理子类对象的增减,问题是Leaf不应具有增减子类对象的功能。

安全方式:将增减子类的功能放在Composite中实现。解决了叶子节点的问题,但客户端就要做出相应的判断。

JUnit3.8使用的是安全方式。

6.  Decorator装饰模式(油漆工模式)

动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

看图说话:

 
      

 

装饰者可以有自己的状态和新的行为,只关心自己的变化,封装了具体被装饰的对象的行为。注意decorate方法的使用。

Proxy对比,

A.一般代理模式中被代理对象是不被客户端知道的,在代理对象初始化时或之前就已初始化好了的。而装饰模式要知道具体的被装饰对象及装饰流程,被装饰对象是通过decorate方法传递给装饰者的。

B.代理对象一般不多,而装饰者一般较多。

7Bridge桥接模式

      将抽象部分与它的实现部分分离,使它们都可以独立地变化。

         看图说话:

         
         
 

      A.什么样的事物适合它的抽象与实现相分离?

      注解:

复杂事物。

那有多复杂?这里涉及到个数学问题

我们假设看上面的每个抽象与它的实现都有一种组合关系,且有两个具体的抽

象,两个具体的实现。

如果使用Bridge模式,那么需要四个类来完成2+2=4

如果使用继承的方式实现也需要四个类来完成2×2=4

所以可以知道,当具体的抽象和具体的实现组合数大于4时,使用桥接模式是

多么节省资源。

B.抽象与实现分离有什么好处?

注解:

     各自任意变化,且可以任意的组合。就像电脑的硬件可以是任意厂商的,软件

可以是任意人开发的,但都可以相互组合一样。

C.具体应用的体现。

MVCService层和Dao层之间可以看作桥接模式的体现,之前说过Service

的某个ServiceDao的封装可以视为Façade模式,那么此时桥接模式就可以看作是

多个Façade的集合。

8.  Flyweight亨元模式

运用共享技术有效地支持大量细粒度的对象,避免大量拥有相同内容的小类的开销,使大家共享一个元类。

看图说话:

      
 
 

 

  A.当有当量的相似对象存在时,要抽象出相似的部分作为“元类”共享,让差异

部分可以通过传参的形式传入到共享对象的方法中来达到差异操作。

    B.注意关键点是FlyweightFacory的实现,通过它来达到共享的目的。

    C.优缺点:

           优点:Flyweight模式是一个提高程序效率和性能的模式,会大大加快程

序的运行速度.应用场合很多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值