第3章 结构型模式
- 格式:pdf
- 大小:391.88 KB
- 文档页数:71
设计模式——结构型模式(包含7种)结构型设计模式是从程序的结构上解决模块之间的耦合问题。
包括以下七种模式:1.Adapte适配器模式:Adapter模式通过类的继承或者对象的组合侧重于转换已有的接⼝,类适配器采⽤“多继承”的实现⽅式,带来了不良的⾼耦合,所以⼀般不推荐使⽤。
对象适配器采⽤“对象组合”的⽅式,更符合松耦合精神。
例如:笔记本电源适配器,可以将220v转化为适合笔记本使⽤的电压。
2.Bridge桥接模式:将抽象部分与实现部分分离,使它们都可以独⽴的变化。
减少因变化带来的代码的修改量。
例如:经典例⼦,电灯开关,开关的⽬的是将设备打开或关闭,产⽣的效果不同。
posite组合模式:将对象组合成树形结构以表⽰“部分-整体”的层次结构。
Composite模式使得客户对单个对象和组合对象的使⽤具有⼀致性。
从⽽解决了解决客户程序与复杂对象容器的解耦,即:通过继承统⼀的接⼝,我们可以将容器对象及其⼦对象看成同⼀类对象使⽤,以减少对象使⽤中的复杂度。
例如:让⽤户⼀致地使⽤单个对象和组合对象,1+2和(1+1)+(2*3)都是合法的表达式。
单个与整体都可以进⾏加法运算符的操作。
4.Decorator装饰模式:动态地给⼀个对象添加⼀些额外的职责。
就增加功能来说,Decorator模式相⽐⽣成⼦类更为灵活。
[GOF 《设计模式》]Decorator模式采⽤对象组合⽽⾮继承的⼿法,实现了在运⾏时动态的扩展对象功能的能⼒,⽽且可以根据需要扩展多个功能,避免了单独使⽤继承带来的“灵活性差”和“多⼦类衍⽣问题”。
同时它很好地符合⾯向对象设计原则中“优先使⽤对象组合⽽⾮继承”和“开放-封闭”原则。
例如:⼀幅画,可以直接挂到墙上,也可以加上框架和镶上玻璃后,再挂到墙上。
5.Facade外观模式:为⼦系统中的⼀组接⼝提供⼀个⼀致的界⾯,简化接⼝。
例如:我们拨打10086,可以办理,彩铃,⼿机报,全时通等业务(⼦对象),⽽10086则是为⼦对象所使⽤的⼀致界⾯。
浅谈系统设计模式之结构型模式系统设计过程中,需要根据需要解决的实际问题去考虑应该应用哪些设计模式来解决这些问题。
软件系统的设计模式可以根据处理范围的不同,分为类模式和对象模式;还可以从用途和目的角度进行分类,可以将设计模式划分为创建型模式、结构型模式和行为型模式三大种类模式;之前有篇文章对创建型模式做了一些说明,接下来是对结构型模式进行相关的阐述。
结构型模式的设计理念即是怎样将类或者对象结合在一起,形成一个更大的结构。
结构型模式分为了类结构型模式和对象结构型模式。
包括了适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。
1)适配器模式:适配器模式从名称上进行理解,与适配、兼容等有关。
适配器模式可以作为类结构模式,同时也可以作为对象结构模式。
在类结构模式中,是使用一个具体的类将适配者适配到一个目标接口中;在对象结构模式中,一个适配器可以将多个不同的适配者适配到同一个目标。
2)桥接模式:桥接模式是一种对象结构型模式,可称为接口模式或者柄体模式。
桥接模式是将抽象部分与实现部分相分离,使抽象和实现都可以独立地进行变化。
3)组合模式:组合模式是对象结构型模式,可称为整体-部分模式。
是将多个对象组合成一个树形结构,在树形结构中,有叶子对象和容器对象形成整体-部分的结构层次。
4)装饰模式:装饰模式是对象结构模式。
通过装饰模式,可以以动态的方式给单个对象添加职责功能,职责功能动态撤销时同样可以使用装饰模式。
5)外观模式:外观模式同样是对象结构模式,定义了一个高层接口。
外观模式提供外部与子系统通信,为子系统中的一组接口提供一个一致性的外观界面。
6)享元模式:享元模式也是对象结构模式,是利用共享技术进行支持大量细粒度的对象。
享元对象可以区分内部状态和外部状态,所以可以做到共享。
7)代理模式:代理模式是一个对象结构模式,可以为某个对象提供一个代理,并由代理对象控制对原对象的引用。
代理模式可以协调调用都和被调用者,可以降低系统的耦合性,但这样就会造成请求处理的速度变慢。
结构型设计模式(七种)3. 结构型设计模式结构型模式描述如何将类或对象按某种布局组成更⼤的结构。
它分为类结构型模式和对象结构型模式,前者采⽤继承机制来组织接⼝和类,后者采⽤组合或聚合组合对象。
由于组合关系或聚合关系⽐较继承关系耦合度低,满⾜“合成复合原则”,所以对象结构型模式⽐类结构型模式具有更⼤的灵活性。
结构型模式分为以下 7 种:1)代理(Proxy)模式:为某对象提供⼀种代理以控制对象的访问。
即客户端通过代理简介地访问该对象,从⽽限制、增强或修改该对象的⼀些特征。
2)适配器(Adapter)模式:将⼀个类的接⼝转换成希望的另⼀个接⼝,使得原本由于接⼝不兼容⽽不能⼀起⼯作的那些类能⼀起⼯作。
3)桥接(Bridge)模式:将抽象与实现分离,使它们可以独⽴变化。
它是⽤组合关系代替继承关系来实现的,从⽽降低了抽象和实现这两个可变维度的耦合度。
4)装饰(Decorator)模式:动态地给对象增加⼀些职责,即增加其额外的功能。
5)外观(Facade)模式:为多个复杂的⼦系统提供⼀个⼀致的接⼝,使这些⼦系统更加容易被访问。
6)享元(Flyweight)模式:运⽤共享技术来有效地⽀持⼤量细粒度对象的复⽤。
3.1 代理(Proxy)模式在有些情况下,⼀个客户不能或者不想直接访问另⼀个对象,这时需要找⼀个中介帮忙完成某项任务,这个中介就是代理对象。
例如,购买⽕车票不⼀定要去⽕车站买,可以通过12306 ⽹站或者去⽕车票代售点购买。
⼜如找⼥朋友、找保姆、找⼯作都可以通过中介完成。
在软件设计中,使⽤代理模式的例⼦很多,如,要访问原型对象⽐较⼤(如视频或者⼤图像等),其下载要花很多时间。
还有因为安全需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。
3.1.1 代理模式的定义与特点代理模式的定义:由于某些原因需要给某对象提供⼀个代理以控制对该对象的访问。
这时,访问对象不合适或者不能直接引⽤⽬标对象,代理对象作为访问对象和⽬标对象之间的中介。