java桥梁模式_java设计模式之桥梁模式(Bridge)

1.桥梁模式 与 策略模式 非常相似

(其实很多设计模式都相似,因为所有的模式都是按照设计原则 而设计出来的,设计原则就相当于武功的心法,设计模式就是招式,只要心法过硬,就可以无招胜有招了。)

这里也有比较详细的说明 策略模式 VS 桥梁模式 (画画,使用蜡笔和使用毛笔以及颜料的区别)

好了,这里先说 桥梁模式,最后再总结两者的区别

2.桥梁模式(还是那样,设计模式就是为了代码健壮,代码重用,所以高内聚,低耦合永远都是那么受欢迎,什么抽象类啊,接口啊···)

场景,农民施肥。

这里农民类 调用 肥料类,用的是组合的方式,也就是农民类中有一个成员属性是肥料类类型的(就是这里起到了桥梁的作用),

为了可扩展性,农民类写成抽象类,肥料类则写成接口;

在施肥这个动作中,不仅肥料的种类会变,而且农民这边也会改变,人工施肥,或者机器施肥等等,所以这里又两个可变因子。

而且这两个可变因子还可以随机组合的,如 人工施 化肥,人工施有机肥;或者 机器人施化肥,机器人施有机肥。

肥料接口 Manure:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagedesign.patterns.bridge2;2 /**

3 * 肥料类4 **/

5 public interfaceManure {6 voidmanuring();7 }

View Code

使用接口的原因很简单,多态嘛

有机肥类,动物肥类 AnimalManure:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagedesign.patterns.bridge2;2

3 public class AnimalManure implementsManure{4

5 @Override6 public voidmanuring() {7 System.out.println("==这是动物肥料,也就是翔····");8 }9

10 }

View Code

化肥类 ChemicalManure:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagedesign.patterns.bridge2;2

3 public class ChemicalManure implementsManure{4

5 @Override6 public voidmanuring() {7 System.out.println("==我是化肥···!");8 }9

10 }

View Code

然后到抽象类 农民类 Farmer:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagedesign.patterns.bridge2;2 /**

3 * 农民类4 **/

5 public abstract classFarmer {6 protectedManure manure;7

8 publicFarmer(Manure manure){9 this.manure =manure;10 }11

12 abstract voiddoManuring();13

14 }

View Code

人类农民 HumanFarmer:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagedesign.patterns.bridge2;2

3 public class HumanFarmer extendsFarmer{4

5 publicHumanFarmer(Manure manure) {6 super(manure);7 }8

9 @Override10 voiddoManuring() {11 System.out.println("我是大农民,我爱劳动");12 manure.manuring();13 }14

15 }

View Code

当科技发达后,可能会有机器人来施肥的 RobotFarmer:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagedesign.patterns.bridge2;2

3 public class RobotFarmer extendsFarmer{4

5 publicRobotFarmer(Manure manure) {6 super(manure);7 }8

9 @Override10 voiddoManuring() {11 System.out.println("机器人也可以施肥的哦。");12 manure.manuring();13 }14

15 }

View Code

最后测试一下 Test类:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagedesign.patterns.bridge2;2

3 public classTest {4 public static voidmain(String[] args){5 //开始施肥6 // //1.准备肥料7 //Manure manure = new AnimalManure();8 //4.突然想施化肥了,

9 Manure manure = newChemicalManure();10 //2.人工施肥,施的是有机肥, 动物肥

11 Farmer farmer = newHumanFarmer(manure);12 // //5.人工施肥,的确较慢,以后会有机器人施肥的13 //Farmer farmer = new RobotFarmer(manure);14

15

16 //3.开工

17 work(farmer);18

19 }20

21 public static voidwork(Farmer farmer){22 farmer.doManuring();23 }24 }

View Code

哎,真的惭愧,感觉我的例子说服力一般,如果理解不了,参考这里桥梁模式(Bridge)(不同平台备分不同格式的log文件)

3.总结:

Strategy(策略模式)是调用者不变,变的只是被调用的方法;(候选模式嘛)

Bridge(桥梁模式)是 调用者和被调用者都可以改变。--可以看成策略模式的加强版(更加一步)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值