走进设计模式(二)-结构型模式
来源:互联网 发布: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
- 走进设计模式(二)-结构型模式
- 设计模式之结构型模式二
- php设计模式(二):结构型模式
- 设计模式-结构型软件设计模式(二)
- 设计模式:结构型模式(二)
- 走进设计模式(一)-创建型模式
- 走进“设计模式”
- [设计模式笔记]二. 结构型模式--7.Adapter模式(适配器模式)(二)
- [设计模式笔记]二. 结构型模式--8.Bridge模式(桥模式)(二)
- [设计模式笔记]二. 结构型模式--12.Flyweight模式(享元模式)(二)
- 设计模式笔记--结构型模式之二--桥接 Bridge
- 设计模式C++ 笔记二 结构型模式
- [设计模式笔记]二. 结构型模式总结
- [设计模式笔记]快速小结(二)---结构型模式
- 设计模式-结构型模式总结实例(二)
- 设计模式之“结构型模式”(二)
- C++设计模式系列之二结构型模式
- 设计模式(二)之结构型模式
- Java—IO流详解(二)
- Android Study
- PHP内核--源码安装与介绍
- meanshift跟踪算法详解
- [JavaEE - JPA] 7. ORM的核心注解 - 关系类型
- 走进设计模式(二)-结构型模式
- Codeforces Round #376 (Div. 2) 题解
- poj 1797 路径问题 dijkstra改写
- Django模板举例代码
- CCF 201612-2 火车购票 JAVA实现
- Hadoop家族技能图谱
- iText7---Adding low-level content添加低层级内容
- I Hate It
- 【openjudge 计算概论(A)】[基础编程练习(控制成分)]