设计模式学习之桥梁模式
2017-03-25 14:23
204 查看
什么是桥梁模式?
桥梁模式是将抽象与实现解耦,使得两者可以独立的变化。那么我们的重点就是如何将抽象与实现解耦?
桥梁模式的关键是什么?
如下如为桥梁模式的类图,其中的关键就是Abstraction和Implementor的关系。Abstraction为抽象角色,Implementor为实现角色,其中抽象类依赖实现类。
下面我们看一下桥梁模式的四个角色:
Abstraction - 抽象化角色:它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类。
Implementor - 实现化角色:它是接口或者抽象类,定义角色必须的行为和属性。
RefinedAbstraction - 修正抽象化角色:它引用实现化角色对修正化角色进行修正。
ConcreteImplementor - 具体实现化角色:它实现接口或抽象类定义的行为和属性。
对于桥梁模式,主要解决的是多个模式控制下的复杂性,例如我们搬家时会准备很多箱子,包括有纸箱、布箱,有大箱子、中箱子、小箱子等。我们的UML设计如下:
SizeImpl接口(实现化角色)代码:
桥梁模式的优点
实现抽象与现实的分离,很好的解决了继承的缺点。
优秀的扩展能力。
实现细节对客户透明。
桥梁模式的使用场景
系统需要再抽象化角色与具体化角色之间增加更多灵活性。
客户端要求实现化角色的任何改变不影响客户端。
一个构建有多于一个的抽象化角色和实现化角色。
虽然系统中使用继承没有问题,但是系统中的抽象化角色与具体化角色需要独立变化。
参考
http://blog.csdn.net/xingjiarong/article/details/50132727
桥梁模式是将抽象与实现解耦,使得两者可以独立的变化。那么我们的重点就是如何将抽象与实现解耦?
桥梁模式的关键是什么?
如下如为桥梁模式的类图,其中的关键就是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:paper size:20这样做的好处是如果我们想扩展皮箱,不需要再去定义大皮箱、中皮箱、小皮箱三个类,只需要定义一个皮箱类。
桥梁模式的优点
实现抽象与现实的分离,很好的解决了继承的缺点。
优秀的扩展能力。
实现细节对客户透明。
桥梁模式的使用场景
系统需要再抽象化角色与具体化角色之间增加更多灵活性。
客户端要求实现化角色的任何改变不影响客户端。
一个构建有多于一个的抽象化角色和实现化角色。
虽然系统中使用继承没有问题,但是系统中的抽象化角色与具体化角色需要独立变化。
参考
http://blog.csdn.net/xingjiarong/article/details/50132727
相关文章推荐
- 设计模式C++学习笔记之十一(Bridge桥梁模式)
- 设计模式C++学习笔记之十一(Bridge桥梁模式)
- 设计模式C++学习笔记之十一(Bridge桥梁模式)
- 设计模式学习笔记——桥梁模式
- 设计模式C++学习笔记之十一(Bridge桥梁模式)
- 设计模式学习笔记--桥梁(Bridge)模式
- 设计模式C++学习笔记之十一(Bridge桥梁模式)
- 设计模式C++学习笔记之十一(Bridge桥梁模式)
- 设计模式C++学习笔记之十一(Bridge桥梁模式)
- 设计模式C++学习笔记之二(Bridge桥梁模式)
- 设计模式系列学习十一:桥梁模式(Bridge)
- 学习php设计模式 php实现桥梁模式(bridge)
- 学习php设计模式 php实现桥梁模式(bridge)
- 设计模式学习笔记——桥梁模式
- 设计模式C++学习笔记之十一(Bridge桥梁模式)
- 设计模式之Factory(转帖)[学习用]
- 学习设计模式之Bridge模式
- java设计模式学习4--Builder Pattern[原创]
- java设计模式学习2--Factory Pattern[原创]
- 设计模式学习笔记