设计模式总结—结构型模式


结构型模式

结构型模式是指如何组合类和对象以获得更合理的结构。所以结构型模式分为类结构模式和对象结构模式这两种。类结构模式是指采用继承机制来组合接口或实现。组合结构模式是指通过组合一些对象,从而实现新的功能。

 

今天我们要了解的常见的结构型模式主要包括七种,它们分别是适配器模式、装饰模式、桥接模式、组合模式、享元模式、代理模式和外观模式。我们依次来介绍这些模式。

 

适配器模式

适配器模式重在转换接口,它能够使因为接口不兼容原本不能在一起工作的两个类在一起工作。主要用在软件维护的时候,双方的类或接口都不容易修改时候再使用适配器模式适配。

 

下面我们来看下对象适配器类图:





装饰模式

装饰模式是为已有功能动态的添加更多功能的一种方式,它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此当需要执行特殊行为时,客户代码就可以在运行是根据需要有选择的、按顺序的使用装饰功能包装对象了。这样就把类中的装饰功能从类中搬移去除,简化了原有的类,有效的把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。

 

类图如下:


 




桥接模式

桥接模式将抽象部分与它的实现部分分离,使它们都可以独立的变化。也就是说实现系统可能有多角度分类每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。当我们需要多角度分类实现对象,而只有继承会造成大量的类增加,不能满足开放-封闭原则时,就应该考虑使用桥接模式。

 

类图如下:


 




组合模式

组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。如果需求中体现部分与整体层次的结构时,已经希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所以对象时,就应该考虑用组合模式了。组合模式的效果是客户可以一致的使用组合结构和单个对象。任何用到基本对象的地方都可以使用组合对象。

 

类图如下:


 




享元模式

运用共享技术有效的支持大量细粒度的对象。如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑使用;还有就是对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。

 

类图如下:


 

 




代理模式

代理模式就是为其它对象提供一种代理以控制对这个对象的访问。代理模式一般应用以下几个方面,一是远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实;二是应用于虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象;三是安全代理,用来控制真实对象访问时的权限;四是智能指引,是指当调用真实的对象时,代理处理另外一些事。

 

类图如下:


 




外观模式

外观模式为子系统中的一组接口提供了一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。也就是说应该让一个系统中的子系统间的通信和相互依赖达到最小,而具体办法就是引起一个外观对象,它为子系统间提供了一个单一而简单的屏障。

 

类图如下:


 

 


结构型相关模式的比较:

 

代理和外观的比较

代理与外观的区别在于,代理代表一个单一对象而外观对象代表一个子系统;代理的客户无法直接访问目标对象,由代理提供对单独目标对象的访问控制,而外观的客户对象可以直接访问子系统中的各个对象,但通常由外观对象提供对子系统各元件功能的简化的共同层次的调用接口。

 

代理与适配器比较

代理与适配器,其实都是属于一种衔接性质的功能。代理是一种原来对象的代表,其他需要与这个对象打交道的操作都是和这个代表交涉。而适配器则不需要虚构出一个代表者,只需要为应付特定使用目的,将原来的类进行一些组合。

 

桥接模式与适配器比较

桥接模式与适配器模式具有一些共同特征,就是给另一对象提供一定程度的间接性,这样可以有利于系统的灵活性。桥接模式和适配器模式被用于软件生命周期的不同阶段,与适配器模式一般用于系统维护阶段相比桥接模式通常是在设计之初,就对抽象接口与它的实现部分进行桥接,让抽象与实现两者可以独立演化。

 

外观与适配器比较

外观模式和适配器模式还有些近似,都是对现存系统的封装。外观定义的是一个新的接口,而适配器则是复用一个原有的接口,适配器是使两个已有的接口协同工作,而外观则是为现存系统提供一个更为方便的访问接口,适配器是用来适配对象的,外观则是用来适配整个系统的,外观所针对的对象的粒度更大。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值