走进设计模式(二)-结构型模式

来源:互联网 发布:ubuntu系统的全面备份 编辑:程序博客网 时间:2024/05/19 09:18

1.前言

结构型模式有以下几种。

  • 适配器模式
  • 装饰模式
  • 代理模式
  • 外观模式
  • 桥接模式
  • 组合模式
  • 享元模式

下面一一学习。

2. 适配器模式

适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

结构如下:

  • Target 目标角色
  • Adaptee 需要适配的接口
  • Adapter 适配器

举个例子,我们手机充电器接口 就充当这这一角色。

public class Adaptee {    public int getV(){        return 220;    }}public interface Target {    public int getV();}public class Adapter extends Adaptee implements Target {    @Override    public int getV() {        return 5;    }}

3. 装饰模式

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

结构如下:

  • Component 抽象组件
  • ConcreteComponent 抽象组件的实现
  • Decorator 抽象装饰者
  • ConcreteDecoratot

怎么用呢?就是用我们的Decorator去扩展Component的功能。

4. 代理模式

为其他对象提供一种代理以控制对这个对象的访问

结构如下:

  • Subject 抽象主题类
  • RealSubject 真实主题类
  • ProxySubject 代理类
  • Client 客户类

最简单的代购,ProxySubject就像桥梁,RealSubject就像代购。

5. 外观模式

要求每一个子系统的外部与其内部的通信必须通过一个统一的对象进行

结构如下:

  • Facade 对外的统一接口
  • System 子系统接口

将子系统隐藏起来,提供一个对外的接口方便我们调用。

6. 桥接模式

将抽象部分与实现部分分离,使它们都可以独立的变化。

  • Abstraction 抽象部分
  • RefinedAbstraction 优化的抽象部分
  • Implementor 实现部分
  • ConcreteImplementor 实现部分的具体实现
  • Client 客户端

桥接模式是比较难理解的一个模式。

电视和遥控器是一个完美展示两层抽象的例子。你有一个电视机的接口,还有一个遥控器的抽象类。我们都知道,将它们中任何一个定义为一个具体类都不是好办法,因为其它厂家会有不同的实现方法。

7. 组合模式

将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性

组合模式比较好理解,就像文件树一样,一层一层的。

  • Component 抽象根节点
  • Composite 定义有子节点的那些枝干节点的行为
  • Leaf 叶子节点对象
  • Client 客户端

8. 享元模式

使用共享对象可以有效地职称大量的细粒度的对象

  • Flyweight 享元对象抽象基类或者接口
  • ConcreteFlyweight 具体的享元对象
  • FlyweightFactory 享元工厂

这个模式也比较好理解,而且我们经常见到,就像各种缓存池等等。


这篇博客没有给出一些例子。个人感觉给的例子太生搬硬套了,咱们还是理解思想把。

0 0
原创粉丝点击