设计模式(7)-桥接模式
来源:互联网 发布:spss数据分析实例 编辑:程序博客网 时间:2024/05/22 12:21
简介
为什么要使用桥接模式
举个例子来说明为什么要是用桥接模式。如果我们想绘制出长方形,圆形,三角形三个形状,我们可以创建四个形状类。但如果同时要求这些形状可能有红,绿,蓝等等颜色,那我们该怎么办呢?
现有如下两种方案:
- 为每种形状都提供三种颜色。
- 根据实际需要对形状和颜色进行组合。
哪种方法好呢?
当然是方案2好。方案2的实现方式即使桥接模式的应用。
什么是桥接模式
桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
别名
- 柄体(Handle and Body)模式
- 接口(Interface)模式
类型
对象结构型模式。
遵循的原则
开闭原则。
角色
角色
- Abstraction:抽象类
- 抽象类
- 声明了一个Implementor对象
- RefinedAbstraction:扩充抽象类
- 继承了Abstraction的具体类
- 实现了Abstraction中的的抽象方法
- 可以调用Implementor中的方法
- Implementor:实现类接口
- 实现类接口
- 为抽象类提供方法
- ConcreteImplementor:具体实现类
- 具体实现类。
- 为抽象类提供具体的业务方法
UML类图
实现
- 创建抽象类Abstraction
- 创建扩充抽象类RefinedAbstraction.java
- 创建实现类接口Implementor.java
- 创建具体实现类ConcreteImplementorA.java、ConcreteImplementorB.java
- 创建测试类Client.java
Abstraction.java
public abstract class Abstraction { Implementor implementor; public abstract void operation();}
RefinedAbstraction.java
public class RefinedAbstraction extends Abstraction { public void operation() { implementor.operationImpl(); }}
Implementor.java
public interface Implementor { void operationImpl();}
ConcreteImplementorA.java
public class ConcreteImplementorA implements Implementor { @Override public void operationImpl() { System.out.println("ConcreteImplementorA operationImpl"); }}
ConcreteImplementorB.java
public class ConcreteImplementorB implements Implementor{ @Override public void operationImpl() { System.out.println("ConcreteImplementorB operationImpl"); }}
Client.java
public class Client { public static void main(String[] args) { Abstraction abstraction = new RefinedAbstraction(); abstraction.implementor = new ConcreteImplementorA(); abstraction.operation(); abstraction.implementor = new ConcreteImplementorB(); abstraction.operation(); }}
测试
运行Client.java的main()
ConcreteImplementorA operationImplConcreteImplementorB operationImpl
实例:多形状多颜色绘图问题
- 创建抽象类Shape
- 创建扩充抽象类Circle.java、Circular.java、Tirangle.java
- 创建实现类接口IColor.java
- 创建具体实现类Red.java、Green.java、Blue.java
- 创建测试类Client.java
抽象类Shape.java
public abstract class Shape { IColor iColor; public void draw(Shape shape) { iColor.fillColor(shape); }}
扩充抽象类Circle.java、Circular.java、Tirangle.java
public class Circle extends Shape {}public class Circular extends Shape {}public class Tirangle extends Shape {}
实现类接口IColor.java
public interface IColor { void fillColor(Shape shape);}
具体实现类Red.java、Green.java、Blue.java
public class Red implements IColor { @Override public void fillColor(Shape shape) { System.out.println("draw red " + shape.getClass().getSimpleName()); }}public class Green implements IColor { @Override public void fillColor(Shape shape) { System.out.println("draw green " + shape.getClass().getSimpleName()); }}public class Blue implements IColor { @Override public void fillColor(Shape shape) { System.out.println("draw blue " + shape.getClass().getSimpleName()); }}
测试类Client.java
public class Client { public static void main(String[] args) { Shape shape = new Circle(); shape.iColor = new Red(); shape.draw(shape); shape = new Circular(); shape.iColor = new Green(); shape.draw(shape); }}
测试
运行Client.java的main()
draw red Circledraw green Circular
优缺点
优点
- 低耦合。桥接模式将抽象化(Abstraction)与实现化(Implementation)脱耦。即在一个软件系统的抽象化和实现化之间使用关联关系(组合或者聚合关系)而不是继承关系,从而使两者可以相对独立地变化。
- 遵守“开闭原则”。在抽象部分和实现部分两个变化维度中任意扩展一个维度,都不需要修改原有代码。
缺点
- 增加了系统设计的难度。
适用环境
- 一个软件系统存在两个独立变化的维度,且这两个维度都需要进行扩展。
使用场景
待补充
问题
在软件开发中,你在哪里使用了桥接模式?如何使用的?
阅读全文
0 0
- 设计模式(7)------桥接模式
- 设计模式(7)-桥接模式
- 设计模式(7)--桥接模式
- 设计模式7 - 桥接模式Bridge
- 设计模式(7) 桥接模式(BRIDGE)
- 设计模式(7)-桥接模式
- 设计模式(八)---桥接模式
- 设计模式------桥接模式(BridgePattern)
- c++设计模式(桥接模式)
- 设计模式(13)-桥接模式
- 设计模式:桥接模式(Bridge)
- 设计模式:桥接模式(Bridge)
- 设计模式(十八)桥接模式
- 设计模式:桥接模式(Bridge)
- 设计模式(七)桥接模式
- 设计模式:桥接模式(Bridge)
- 设计模式(十一)桥接模式
- PHP 设计模式(桥接模式)
- WebApi接口
- hdu1239 Calling Extraterrestrial Intelligence Again(贪心)
- 啦啦啦
- windows下opencv双目标定 自带例子使用
- 模拟百度分页java方法
- 设计模式(7)-桥接模式
- 关于linux下查看磁盘,内容,CPU使用情况的命令
- 天池离线赛
- non-blocking I/O Multiplexing + poll/epoll 的正确使用
- 盒子模型
- 在Ubuntu下编译FFmpeg
- java调用python文件之第三方包路径
- 每日AC- 美团 -- 直方图中最大矩形 与最少字符使字符串变成回文字符串
- カレンダDATA型⇒String