设计模式学习之桥梁模式
来源:互联网 发布:如何在mac上结束命令 编辑:程序博客网 时间:2024/05/09 13:57
什么是桥梁模式?
桥梁模式是将抽象与实现解耦,使得两者可以独立的变化。那么我们的重点就是如何将抽象与实现解耦?
桥梁模式的关键是什么?
如下如为桥梁模式的类图,其中的关键就是Abstraction和Implementor的关系。Abstraction为抽象角色,Implementor为实现角色,其中抽象类依赖实现类。
下面我们看一下桥梁模式的四个角色:
- Abstraction - 抽象化角色:它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类。
- Implementor - 实现化角色:它是接口或者抽象类,定义角色必须的行为和属性。
- RefinedAbstraction - 修正抽象化角色:它引用实现化角色对修正化角色进行修正。
- ConcreteImplementor - 具体实现化角色:它实现接口或抽象类定义的行为和属性。
对于桥梁模式,主要解决的是多个模式控制下的复杂性,例如我们搬家时会准备很多箱子,包括有纸箱、布箱,有大箱子、中箱子、小箱子等。我们的UML设计如下:
SizeImpl接口(实现化角色)代码:
public interface SizeImpl { public int size();}Big类(具体实现化角色)代码:
public class Big implements SizeImpl { @Override public int size() { return 20; }}Small类(具体实现化角色)代码:
public class Small implements SizeImpl { @Override public int size() { return 5; }}AbstractBox抽象类(抽象化角色)代码:
public abstract class AbstractBox { private SizeImpl size; public SizeImpl getSize() { return size; } public void setSize(SizeImpl size) { this.size = size; } public abstract void makeBox();}PaperBox类(修正抽象化角色)代码:
public class PaperBox extends AbstractBox { @Override public void makeBox() { System.out.println("material:paper"); System.out.println("size:" + getSize().size()); }}client代码:
public class BoxClient { public static void main(String[] args) { PaperBox paperBox = new PaperBox(); paperBox.setSize(new Big()); paperBox.makeBox(); }}执行结果如下:
material:papersize:20这样做的好处是如果我们想扩展皮箱,不需要再去定义大皮箱、中皮箱、小皮箱三个类,只需要定义一个皮箱类。
桥梁模式的优点
- 实现抽象与现实的分离,很好的解决了继承的缺点。
- 优秀的扩展能力。
- 实现细节对客户透明。
桥梁模式的使用场景
- 系统需要再抽象化角色与具体化角色之间增加更多灵活性。
- 客户端要求实现化角色的任何改变不影响客户端。
- 一个构建有多于一个的抽象化角色和实现化角色。
- 虽然系统中使用继承没有问题,但是系统中的抽象化角色与具体化角色需要独立变化。
参考
http://blog.csdn.net/xingjiarong/article/details/50132727
0 0
- 设计模式学习之桥梁模式
- 设计模式之-桥梁模式
- 设计模式之桥梁模式
- 设计模式之桥梁模式
- 设计模式之桥梁模式
- 设计模式之桥梁模式
- 设计模式之桥梁模式
- java设计模式之桥梁
- 设计模式学习笔记--桥梁(Bridge)模式
- 二十三 设计模式之桥梁模式
- 【设计模式】之 Bridge 桥梁模式
- java设计模式之桥梁模式
- Java设计模式笔记之桥梁模式
- Java设计模式泛型化之桥梁模式
- 设计模式之Bridge(桥梁)模式
- Swift设计模式之桥梁模式
- 设计模式之桥梁模式--- Pattern Bridge
- java设计模式之桥梁模式
- LeetCode 83. Remove Duplicates from Sorted List(C++版)
- Lua中的metatable详解
- 根据窗口标题,再根据控件文字
- C语言中const关键字的用法
- Ubuntu添加环境变量对所有用户有效
- 设计模式学习之桥梁模式
- vb.net 教程 1-9 数组2
- 【Leetcode】414. Third Maximum Number
- 剑鱼行动
- Lua 元表(Metatable)
- CCF-CSP-2016-12-1 中间数
- 线程使用教程 二 HandlerThread
- 杭电笔试
- 代码整洁之道--对象和数据结构体会