大家都知道java中桥梁模式的用以是将问题的抽象和现实分离开来实现,通过用聚合代替继承来解决子类爆炸性增长的问题,比如
我们有一个画图程序有2个图形(Circle Rectangle)和2种画图方法(Drawing1 Drawing2)图形可能会使用Dawing1来画图,也可能使用Dawing2来画图,在这个画图程序中有两个可变因素,一是图形的种类有可能会增加新的图形,另一个是画图方法有可能会有Drawing3出现,当系统有两个可变因素是我们就应该考虑到桥梁模式,至少他应该在你脑海里闪过。在面型对象设计中有两个规则需要满足:
1.找出变化并封装之
2.优先使用聚合而并不是继承
这两条将在桥梁模式中得到完美体现,在上例中图形是一个变化我们可以抽象出一个形状借口和一些形状类。
Java代码:
interface Shope{
void doDraw();
}
class Circle implements Shape{};
class Rectangle implements Shape{}
画图方法也可以抽象出一个Drawing借口和各种方法
Java代码:
interface Drawing{
void draw();
}
class Drawing1 implements Drawing{}
class Drawing2 implements Drawing{}
但是现在我想知道的是在问题域中图形是不是可以使用画图方法?可不可以在Shape中使用Drawing?
还有我们如何通过在具体的图形中通过构造函数传入具体的画图方法来实现?? 求高手指教!多谢 |