结构型模式

结构型模式:

         结构型模式涉及到如何组合类和对象以获得更大的结构。结构型模式采用继承机制来组合接口或实现。结构型对象模式不是对接口和实现进行组合,而是描述了如何对一些对象进行组合,从而实现新功能的一些方法。因为可以在运行时刻改变对象组合关系,所以对象组合方式具有更大的灵活性,而这种机制用静态类组合是不可能实现的。

 

 


 

Adapter 适配器 ----- 类对象结构型模式

结构型模式 - jinsir@yeah - jinsir@yeah的博客

                                                          类适配器

结构型模式 - jinsir@yeah - jinsir@yeah的博客

                                                        对象适配器

 

作用:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。Adapter时常还要负责提供那些被匹配的类所没有提供的功能。

 

适用性:

         1.你想使用一个已经存在的类,而它的接口不符合你的需求。

2.你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(既那些接口可能不一定兼容的类)协同工作。

3.(仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配他们的接口。对象适配器可以适配它的父类接口。

 

类适配器与对象适配器:

         类适配器

1.  用一个具体的Adapter类对Adapter和Target进行匹配。结果是当我们想要匹配一个类似及所有它的子类时,类Adapter将不能胜任工作。

2.  使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子类。

3.  仅仅引入了一个对象,并不需要额外的指针以间接得到Adaptee。

对象适配器

1.  允许一个Adapter与多个Adaptee---即Adaptee本身以及它的所有子类(如果有子类的话)--同时工作。Adapter也可以一次给所有的Adaptee添加功能。

2.  使得重定义Adaptee的行为比较困难。这就需要生成Adaptee的子类并且使得Adapter引用这个子类而不是引用Adaptee本身。

        

 


 

 

 

Bridge 桥接 ----- 对象结构型模式

结构型模式 - jinsir@yeah - jinsir@yeah的博客

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

优点:

1.  分离接口及其实现部分。一个实现未必不变地帮定在一个接口上。抽象类的实现可以在运行时可进行配置,一个对象甚至可以在运行时刻改变它的实现。将抽象部分和实现部分分离有助于降低对实现部分编译时刻的依赖性。另外,接口和实现分离有助于分层,从而产生更好的结构化系统,系统的高层部分仅需知道Abstraction和Implementor即可。

2.  提高可扩充性。亦可以独立地对Abstraction和Implementor层次结构进行扩充。

3.  实现细节对客户透明。你可以对客户隐藏实现细节,例如共享Implementor对象以及相应的引用计数机制(如果有的话)。

 

相关模式:

         Abstract Factory模式可以用来创建和配置一个特定的Bridge模式。

         Adapter模式用来帮助无关的类协同工作,他通常在系统设计完成后才会被使用。然而,Bridge模式则是在系统开始时就被使用,它使得抽象接口和实现部分可以独立进行改变。

 


 

Composite 组合 ----- 对象结构型模式

结构型模式 - jinsir@yeah - jinsir@yeah的博客

作用:将对象组合成树形结构以表示“部分—整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。

 

适用性:表示对象的部分-整体层次结构。

             忽略组合对象与单个对象的不同,将统一地使用组合结构中的所有对象。

 

 


 

 

Decorator 装饰 ----- 对象结构型模式

结构型模式 - jinsir@yeah - jinsir@yeah的博客

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

适用性:在不影响其它对象的情况下,以动态、通明的方式给单个对象添加职责。

                   处理那些可以撤销的职责。

当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。

 

个人理解:从Decorator模式的类图可以看出,Decorator抽象类继承自Component抽象类。并且每个Decorator抽象类包含一个Component抽象类类型的属性。以上这两点保证了对外Component子类的行为被Decorator子类修饰后,对外仍然可以以Component类型进行操作。Component抽象类中的接口定义要适度,否则利用该模式将增加复杂性。应用这个模式的一般的入口是Component的子类。实例化一个Component抽象类的子类,通过连接不同的Decorator子类来实现不同“装饰”的动态添加。

该模式不是动态的添加接口,而是对在现有接口方法实现的基础添加附加行为。

 


 

 

Façade 外观 ----- 对象结构型模式

结构型模式 - jinsir@yeah - jinsir@yeah的博客

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

 


 

 

Flyweight 享元 ----- 对象结构型模式

结构型模式 - jinsir@yeah - jinsir@yeah的博客

作用:运用共享技术有效地支持大量细粒度的对象。

Flyweight模式的内外部状态:内部状态存储于flyweight中,它包含了独立于flyweight场景的信息,这些信息使得flyweight可以被共享。而外部状态取决于flyweight场景,并根据场景而变化,因此不可共享。

适用性:一个应用程序使用了大量的对象。

                   完全由于使用大量的对象,造成很大的存储开销。

                   对象的大多数状态都可变为外部状态。

                   如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。

应用程序不依赖于对象标识。由于flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。

 

 


 

Proxy 代理 ----- 对象结构型模式

结构型模式 - jinsir@yeah - jinsir@yeah的博客

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

 


 

 

对象结构型模式总结:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值