设计模式之结构型

简介: 接上一篇博客《【软考总结】设置模式之创建型》,带来姊妹篇。

  接上一篇博客《【软考总结】设置模式之创建型》,带来姊妹篇。


1、适配器Adapter

  转换接口,使原本不能一起工作的类一起工作。

  应用场景:我们要调用的接口类型,无法满足我们新系统的使用需求,这时候,我们需要将旧系统的接口,通过适配器进行转配,达到支持新接口调用的目的。


2、桥接模式Bridge


 变化部分和主类分离,从而将多个维度的变化彻底分离,最后提供一个管理类来组合不同维度上的变化。

  比如,《大话设计模式》中的手机品牌和手机功能的分离,用笔作画时,笔的变化和图形的变化分离开来。这个设计模式也用到了大家一直都讨论的聚合关系,手机品牌包括手机软件,但没有手机软件仍然是一个手机,所以,手机品牌和软件之间的关系是聚合关系。


20170530103142495.jpg

3、组合模式Composite


将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。(仔细读component类和composite类就可以更好的理解这句话)


在这个模式中有一个抽象的父类Component ,是枝和叶的父类。那么,枝和叶有什么区别呢?对,枝可以再分枝或叶,而页不能再细分。在代码中如何区分的呢?枝(Composite)中,PrivateList<Component> children=new List<Component>();此方法,用来存储其下的枝和叶,枝的添加方法,通过 Component集合,添加进新的枝和叶,而叶的添加方法,则不能添加。可以看出,枝和叶都是Component类型,只是枝可以继续分枝和叶,其实说的是对象包含对象的问题。


20170530103237940.jpg



应用场景:这种组合模式正是应树形结构而生,所以组合模式的使用场景就是出现树形结构的地方。比如:文件目录显示,多及目录呈现等树形结构数据的操作。



20170530103334059.jpg

4、装饰模式Decorator


 动态地给一个对象附加额外的职责。


  装饰者为功能的扩展提供了一个比使用子类继承更加灵活的选择。


  学习这个设计模式需要注意两点:被装饰者,装饰的顺序。


  确定被装饰者。以《大话设计模式》中的例子说明,我们需要装饰一个人,那么,人就是被装饰的对象,服饰类(Finery)继承人类(Person),用服饰装饰人,所以,服饰类中:

      protected Person component;
      //打扮
      public void Decorate(Person component)
{
//确定要被装饰的对象
This.component=component;
}

在客户端确定装饰顺序,像穿衣服一样,里面的衣服先穿,最后装饰的最先变现出来。

应用场景:手机地图中画布的显示,确定画布,画基础画布,画图钉,画提示框等等。



5、外观模式 Facade

一个类代表一个系统。


将多个关系比较复杂的类放到一个外观类中统一处理,从而外部调用起来只要与外观打交道,而不必清楚内部各个类之间的调用关系,简化了客户端调用的复杂度。


   这时候,你可能想到了某个设计模式,客户端只用和Director打交道,不用知道里面具体的过程。嘿,醒醒,想啥呢!那是建造者模式,是生成对象,而外观模式,主要是处理类与类之间的结构关系和信息的传递,不是对象的构建。一些做过《机房重构》的小伙伴可能有更深的理解,这里不再赘述。(感觉在软考中,没做到过外观模式的题)

6、享元模式Flyweight

   共享对象,实例不保存自己的状态,将状态保存到外部。


享元模式的核心在于享元工厂类,享元工厂类提供一个存储享元对象的享元池,用户需要对象时,首先从享元池中获取,如果享元池中不存在,则创建一个新的享元对象返回给用户,并在享元池中保存该新增对象。以《大话设计模式》中 网站共享为例,如果已经有博客网站类型,直接返回一个博客网站类,如果没有,实例化创建。还有点像单例模式了是不。

7、代理模式Proxy

  为其他对象提供一种代理以控制对这个对象的访问。与适配器不同的是,代理模式中,代理和真实的类都继承父类,拥有的父类的方法,而适配器只起到一个转换的作用。在代理类中,由真实类进行操作。

      //代理类     
  class Proxy:IGiveGift{
Pursuit gg;  
Public Proxy ( Girl mm)
{
gg=new Pursuit();      //真实类
}
Public void GiveFlowers()
{
gg.giveFlowers();       //真实类送花
}
}

  参考:http://blog.csdn.net/liujiahan629629/article/details/19428485

 

总结:

   结构型组合类和对象,获得更大的结构。

相关文章
|
8月前
|
设计模式 存储 缓存
结构型设计模式07-享元模式
结构型设计模式07-享元模式
24 0
|
8月前
|
设计模式 存储 安全
结构型设计模式05-组合模式
结构型设计模式05-组合模式
19 0
|
29天前
|
设计模式 存储 缓存
第三篇 结构型设计模式 - 简化复杂系统的结构
第三篇 结构型设计模式 - 简化复杂系统的结构
|
30天前
|
设计模式 存储 Java
[设计模式Java实现附plantuml源码~结构型]实现对象的复用——享元模式
[设计模式Java实现附plantuml源码~结构型]实现对象的复用——享元模式
|
30天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~结构型]处理多维度变化——桥接模式
[设计模式Java实现附plantuml源码~结构型]处理多维度变化——桥接模式
|
30天前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~结构型]不兼容结构的协调——适配器模式
[设计模式Java实现附plantuml源码~结构型]不兼容结构的协调——适配器模式
|
30天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~结构型]对象的间接访问——代理模式
[设计模式Java实现附plantuml源码~结构型]对象的间接访问——代理模式
|
30天前
|
设计模式 安全 Java
[设计模式Java实现附plantuml源码~结构型]树形结构的处理——组合模式
[设计模式Java实现附plantuml源码~结构型]树形结构的处理——组合模式
|
30天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~结构型] 扩展系统功能——装饰模式
[设计模式Java实现附plantuml源码~结构型] 扩展系统功能——装饰模式
|
30天前
|
设计模式 JavaScript 前端开发
[设计模式Java实现附plantuml源码~结构型] 提供统一入口——外观模式
[设计模式Java实现附plantuml源码~结构型] 提供统一入口——外观模式