设计模式之结构型模式

设计模式可分为三种:创建型模式、结构型模式和行为型模式

  • 结构型模式是什么?

       是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。

  • 结构型模式又有:适配器模式、代理模式、桥接模式、组合模式、装饰模式、外观模式和享元模式

适配器模式       

• 什么是适配器模式?
   – 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得 原本由于接口不兼容而不能一起工作的那些类可以在一起工作
• 模式中的角色
   – 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
   – 需要适配的类(Adaptee):需要适配的类或适配者类。
   – 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
 
出现这种情况:
适配器解决方案:
像我们学过的IO流就是适配器模式,适配器也通常用来旧系统改造和升级
 
 

代理模式

 核心作用通过代理,控制对对象的访问

 核心角色:
   • 抽象角色
     – 定义代理角色和真实角色的公共对外方法
   • 真实角色
     – 实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
     – 关注真正的业务逻辑!
   • 代理角色
    – 实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
    – 将统一的流程控制放到代理角色中处理!
应用场景:
    – 安全代理:屏蔽对真实角色的直接访问。
    – 远程代理:通过代理类处理远程方法调用(RMI)
    – 延迟加载:先加载轻量级的代理对象,真正需要再加载真实对象。
 
代理又分静态代理和动态代理,这里不细说,简单说下动态代理比静态代理的优点。
    – 抽象角色中(接口)声明的所以方法都被转移到调用处理器一个集中的方法中处理,这样,我们可以更加灵活和统一的处理众多的方法。
 

桥接模式

核心要点

     – 处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联。

桥接模式总结:
 
     – 桥接模式可以 取代多层继承 的方案。 多层继承违背了单一职责原则,复用性较差,类的个数也非常多。 桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。
     – 桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。

组合模式

     – 把部分和整体的关系用 树形 结构来表示,从而使客户端可以 使用统一的方式处理部分对象和整体对象
 核心:
    
    – 抽象构件(Component)角色: 定义了叶子和容器构件的共同点
    – 叶子(Leaf)构件角色:无子节点
    – 容器(Composite)构件角色: 有容器特征,可以包含子节点
 

装饰模式

动态地给一个对象添加额外的功能,比继承灵活

总结 
  – 装饰模式(Decorator)也叫包装器模式(Wrapper)
  – 装饰模式降低系统的耦合度, 可以动态的增加或删除对象的职责 ,并使得需要装饰的具体构建类和具体装饰类可以独立变化,以便增加新的具体构建类和具体装饰类。
优点
  – 扩展对象功能,比继承灵活, 不会导致类个数急剧增加  
  – 可以对一个对象进行多次装饰, 创造出不同行为的组合 ,得到功能更加强大的对象
  – 具体构建类和具体装饰类可以独立变化,用户可以根据需要自己增加新的具体构件子类和具体装饰子类。
缺点
  – 产生很多小对象。大量小对象占据内存,一定程度上影响性能。
  – 装饰模式易于出错,调试排查比较麻烦。
 

装饰模式和桥接模式的区别:

– 两个模式都是为了解决过多子类对象问题。但他们的诱因不一样。 桥接模式是对象自身现有机制沿着多个维度变化 ,是既有部分不稳定。装 饰模式是为了增加新的功能。

外观模式

为子系统提供统一的调用接口,使得子系统更加容易使用

享元模式

运用共享技术有效的实现管理大量细粒度对象,节省内存,提高效率

– 内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的对象,我们可以通过享元模式,节省内存。
 
享元对象能做到共享的关键是区分了内部状态和外部状态
• 内部状态:可以共享,不会随环境变化而改变
• 外部状态:不可以共享,会随环境变化而改变

 

优点
– 极大减少内存中对象的数量
– 相同或相似对象内存中只存一份,极大的节约资源,提高系统性能
– 外部状态相对独立,不影响内部状态
缺点
– 模式较复杂,使程序逻辑复杂化
– 为了节省内存,共享了内部状态,分离出外部状态,而读取外部状态使运行时间变长。用时间换取了空间。
 

结构型模式汇总

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值