1700475900
生产出的衣服卖出去了……
1700475901
1700475902
我赚钱呀……
1700475903
1700475904
看代码中的黑体部分,就修改了这一条语句就完成了生产产品的转换。那我们深入思考一下,既然万物都是运动的,我现在只有房地产公司和山寨公司,那以后我会不会增加一些其他的公司呢?或者房地产公司会不会对业务进行细化,如分为公寓房公司、别墅公司,以及商业房公司等呢?那我告诉你,会的!绝对会的!但是你发觉没有,这种变化对我们上面的类图来说不会作大的修改,充其量只是扩展:
1700475905
1700475906
❑增加公司,要么继承Corp类,要么继承HouseCorp或ShanZhaiCorp,不用再修改原有的类了。
1700475907
1700475908
❑增加产品,继承Product类,或者继承House类,你要把房子分为公寓房、别墅、商业用房等。
1700475909
1700475910
你唯一要修改的就是Client类。类都增加了,高层模块也需要修改,也就是说Corp类和Product类都可以自由地扩展,而不会对整个应用产生太大的变更,这就是桥梁模式。
1700475911
1700475912
1700475913
1700475914
1700475916
设计模式之禅 29.2 桥梁模式的定义
1700475917
1700475918
桥梁模式(Bridge Pattern)也叫做桥接模式,是一个比较简单的模式,其定义如下:Decouple an abstraction from its implementation so that the two can vary independently.(将抽象和实现解耦,使得两者可以独立地变化。)
1700475919
1700475920
桥梁模式的重点是在“解耦”上,如何让它们两者解耦是我们要了解的重点,我们先来看桥梁模式的通用类,如图29-4所示。
1700475921
1700475922
1700475923
1700475924
1700475925
图29-4 桥梁模式通用类图
1700475926
1700475927
我们先来看桥梁模式中的4个角色。
1700475928
1700475929
❑Abstraction——抽象化角色
1700475930
1700475931
它的主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类。
1700475932
1700475933
❑Implementor——实现化角色
1700475934
1700475935
它是接口或者抽象类,定义角色必须的行为和属性。
1700475936
1700475937
❑RefinedAbstraction——修正抽象化角色
1700475938
1700475939
它引用实现化角色对抽象化角色进行修正。
1700475940
1700475941
❑ConcreteImplementor——具体实现化角色
1700475942
1700475943
它实现接口或抽象类定义的方法和属性。
1700475944
1700475945
桥梁模式中的几个名词比较拗口,大家只要记住一句话就成:抽象角色引用实现角色,或者说抽象角色的部分实现是由实现角色完成的。我们来看其通用源码,先看实现化角色,如代码清单29-16所示。
1700475946
1700475947
代码清单29-16 实现化角色
1700475948
1700475949
public interface Implementor{
[
上一页 ]
[ :1.7004759e+09 ]
[
下一页 ]