设计模式的另一大类型为结构型。共收录了7个模式,分别为适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式。下面从特点和使用两方面小探,欢迎交流!
适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。[大话设计模式]
特点:需要交流的两方,在数据和行为都匹配,但接口不符时,我们应该考虑用适配器,目的是促使交流和复用。可以理解为入乡随俗,相同的意思,不同的表达方式。
使用:通过建立一个适配器类(Adapter),在这个类中,通过调用对需要转换的内容进行转换或翻译。有点类似“换元”。
桥接模式(Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。[大话设计模式]
特点:通过将实现部分分离,在后期能进行自由的搭配,增强了灵活性。
使用:实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。细化分工,使得工作更专业、灵活了。
组合模式(Composite):将对象组合成树形结构以表示‘部分-整体’的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。[大话设计模式]
特点:具有相同功能和任务的部门,附属在不同层级之后,其的行政级别有不同。组合模式能智能、准确判断进行分配。
使用:当需求中体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,使用组合模式。通过“父”生“子”,“子”又再生“子”,如此传承延续,来体现这种整体与部分的关系。
装饰模式(Decorator):动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活。[大话设计模式]
特点:为已有功能动态地添加更多功能的一种方式。把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象。
使用:将每一个功能用一类来分离,调用过程中用一个封装方法来进行封装。这个封装方法以对象名为参数,将对象的现阶段的状态储存起来,作为下一阶段的初始状态。用穿衣服举例容易说与理解:假如穿鞋并穿袜子是一个完整的动作,先穿袜子,接着穿鞋;但不能是穿鞋前先把袜子脱掉,再来穿鞋。如是这样,这动作永远都结束不下来。
外观模式(Facade):为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[大话设计模式]
特点:多对一,一对多。这有点“取之于民,用之于民”。
使用:设计初级阶段,有意识地分离层;开发阶段,建立一个接口,用于减少层间的依赖;维护新旧系统时,建立一个简单清晰的接口(Facade),让新旧系统进行重要资源的顺畅交互。
(外观模式,特征缩略图)
享元模式(Flyweight):为运用共享技术有效地支持大量细粒度的对象。[大话设计模式]
特点:避免大量非常相似的类的开销。
使用:如果一个程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就可以应该考虑使用。从始至终不变的属性可视为内部状态,不同时刻所具有的性质为外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,也应使用享元模式。
代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。[大话设计模式]
特点:不亲自做,而使用第三方代理,功能类似于面向对象的委托。
使用:远程代理,若想隐藏一个对象存在于不同空间的事实,可以为一个对象在不同的地址空间提供局部代表。虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要长时间的真实对象。