结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。
- 类模式
- (类)适配器模式
- 对象模式
- (对象)适配器模式
- 桥接模式
- 组合模式
- 装饰模式
- 外观模式
- 享元模式
- 代理模式
- 代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。
- 适配器(Adapter)模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
- 桥接(Bridge)模式:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现的,从而降低了抽象和实现这两个可变维度的耦合度。
- 装饰(Decorator)模式:动态地给对象增加一些职责,即增加其额外的功能。
- 外观(Facade)模式:为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。
- 享元(Flyweight)模式:运用共享技术来有效地支持大量细粒度对象的复用。
- 组合(Composite)模式:将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。
包含以下角色:
类适配器
对象适配器
仿生机器人:设计一个仿生机器人,在有cry、move等方法。要求在不修改已有代码的基础上使得机器人能像狗一样叫,像狗一样跑
加密适配器:用户信息需要加密后存入数据库,系统已经定义好了数据库操作类,要求重用已有的加密算法,这些算法封装在第三方类库中
JDBC给出一个客户端通用的接口,每一个数据库引擎来适配JDBC驱动,即介于JDBC接口和数据库引擎接口之间的适配器软件。
默认适配器
不需要全部实现接口提供的方法时,可以先设计一个抽象类实现接口,并为该接口的每一个方法提供一个默认实现(空方法),子类可以选择性地覆盖父类的的某些方法
双向适配器
在适配器中有目标类和适配者类的引用时,双向适配器类既可以把适配者接口转换成目标接口,也可以把目标接口转换成适配者接口
水果盘中有水果,大水果盘中还有小水果盘。现在需要对盘中的水果遍历吃
文件浏览
有两个变化维度(即两个变化的原因)的系统,桥接模式将继承关系转换为关联关系, 从而降低了类与类之间的耦合,减少了代码编写量。
包含以下角色
模拟毛笔:大中小3种型号的画笔,能够绘制5种不同颜色。如果用蜡笔,需要15支,如果用毛笔,只需要三支笔和五种颜色的颜料
跨平台视频播放器:Linux、Windows、Unix,播放多种格式的视频
Java虚拟机
与适配器联用
桥接模式用于系统初步设计,在初步设计完成之后,发现系统与已有类无法协调工作时,适用适配器
包含如下角色:
变形金刚:变形金刚在变形之前是汽车,可以在陆地上移动。变形后还要可以说话,如果需要它还要可以变成飞机,在天空中飞翔
多重加密系统:用户使用最简单的加密算法对字符串进行加密,如果觉得不够还可以二次加密、三次加密。提供逆向输出加密、求模加密等。
Java IO
如果只有一个具体构件而没有抽象构件时,可以让抽象装饰继承具体构件
透明装饰模式
要求客户端完全针对抽象编程
半透明装饰模式
允许用户在客户端声明具体装饰者类型的对象,调用在具体装饰者中新增的方法
包含以下角色
电源总开关:为了使用方便,一个电源总开关可以控制四盏灯、一个风扇、一台空调和一台电视机的启动和关闭
文件加密:加密流程分为三个操作,读取源文件、加密、保存加密后的文件。这三个操作相互独立,其业务代码封装在三个不同的类中
单例
通常只需要一个外观类,即单例模式
抽象外观类
在外观模式中,当增加或移除子系统时需要修改外观类,这违背了“开闭原则”。如果引入抽象外观类,则在一定程度上解决了该问题
包含以下角色:
考虑性能,通过享元来节约内存空间,提高系统性能
核心在于享元工厂类,享元工厂类的作用在于提供一个用于存储享元对象的享元池,用户需要对象时,首先从享元池获取,如果存在则返回,如果不存在则创建后返回给用户,并存入享元池。
关键在于区分内部状态(Internal State)和外部状态(External State)。
优点
缺点
适用
共享网络设备(无外部状态)
共享网络设备(有外部状态),分配给每一个终端计算机的端口不同,可以将端口从网络设备中抽取出来,需要时再进行设置
JDK 字符串常量池
单纯享元模式
所有的享元对象都是可以共享的,即所有的抽象享元类的子类都可以共享,不存在非共享具体享元类
复合享元模式(联用组合模式)
将一些单纯享元使用组合模式加以组合,可以形成复合享元对象,这样的享元对象本身不能共享,但是他们可以分解成单纯享元对象,后者可以共享
联用简单工厂
享元工厂通过提供一个静态的工厂方法用于返回享元对象
联用单例模式
通常只有唯一一个享元工厂
包含以下角色
论坛权限控制:已注册的用户可以发帖、修改信息等,而游客只可以浏览
数学运算代理:访问远程实现的对象,本地进行调用
原文:https://www.cnblogs.com/cpaulyz/p/14928613.html