首先这个模式包括七个子模式:适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式
为什么要把这几个模式归到一类叫结构型模式呢?我个人的猜想是它们都有中间过渡,都是实现对象与对象之间的某种关系,下面我们仔细分析一下这几种模式
适配器模式
一、作用
将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作
前提条件:
1、已经存在的类
2、这些类的功能相类似
3、接口不同
二、原理
主要通过Adapter来实现接口的转换,将已有的程序接口变成用户所希望有的
三、好处:
1、将目标类和适配者类解耦
2、增加了类的透明性和复用性
3、灵活性和扩展性都非常好
四、使用环境
1、需要使用现有的类,而这些类的接口不符合系统的需要
2、需要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作
桥接模式
一、作用
将抽象部分与它的实现部分分离,使它们都可以独立地变化
二、优点
1、分离抽象接口及其实现部分
2、提高了系统的可扩充性
3、实现细节对客户透明,可以对用户隐藏实现细节
三、使用情况
1、需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,可以在抽象层建立一个关联关系
2、抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响
3、一个类存在两个独立变化的维度
4、不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统
组合模式
一、定义
组合多个对象形成树形结构以表示“整体—部分”的结构层次。组合模式对单个对象和组合对象的使用具有一致性
二、分析
1、定义了一个抽象构件类,它既可以代表叶子,又可以代表容器,而客户端针对该抽象构建类 进行编程,无须知道它到底表示的是叶子还是容器,可以对其进行统一处理
2、容器对象与抽象构件类之间还建立一个聚合关联关系,在容器对象中既可以包含叶子,也可以包含容器,以此实现递归组合,形成一个树形结构
三、使用环境
1、需要表示一个对象整体或部分层次
2、让客户能够忽略不同对象层次的变化,客户端可以针对抽象构件编程,无须关心对象层次结构的细节
3、对象的结构是动态的并且复杂程度不一样,但客户需要一致地处理他们
装饰模式
一、定义
动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。
二、优点
1、可以提供比继承更多的灵活性
2、通过一种动态的方式来扩展一个对象的功能
3、通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合。可以使用多个具体装饰类来装饰同一对象,得到功能更为强大的对象
4、具体构件类与具体装饰类可以独立变化
三、使用环境
1、以动态、透明的方式给单个对象添加职责
2、动态地给一个对象增加功能,这些功能也可以动态地被撤销
3、当不采用继承的方式对系统进行扩充或者采用继承不利于系统扩展和维护时
外观模式
一、定义
外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
二、优点
1、对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易。
2、实现了子系统与客户之间的松耦合关系
3、降低了大型软件系统中的编译依赖性,并简化了系统在不同平台之间的移植过程
4、只是提供了一个访问子系统的统一入口,并不影响用户直接使用子系统类
享元模式
一、定义
运用共享技术有效的支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。
二、优点
1、它可以极大减少内存中对象的数量,使得相同对象或相似对象在内存中只保存一份
2、享元模式的外部状态相对独立,而且不会影响其内部状态,从而使得享元对象可以在不同的环境中被共享
三、使用环境
1、一个系统有大量相同或相似的对象,由于这类对象的大量使用,造成内存的大量耗费
2、对象的大部分状态都可以外部化,可以将这些外部状态传入对象中
3、使用享元模式需要维护有一个存储享元对象的享元池,而这需要耗费资源,因此,应当在多次重复使用享元对象时才值得使用享元模式
代理模式
一、定义
给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
二、使用环境
1、保护代理
2、缓冲代理
3、防火墙代理
4、同步化代理
5、智能引用代理
以上就是我对结构型模式的理解,有什么不对的地方,不合理的地方可以评论告诉我。