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

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

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

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

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

场景,农民施肥。

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

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

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

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

肥料接口 Manure:

 package design.patterns.bridge2;
/**
* 肥料类
* */
public interface Manure {
void manuring();
}

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

有机肥类,动物肥类 AnimalManure:

 package design.patterns.bridge2;

 public class AnimalManure implements Manure{

     @Override
public void manuring() {
System.out.println("==这是动物肥料,也就是翔····");
} }

化肥类 ChemicalManure:

 package design.patterns.bridge2;

 public class ChemicalManure implements Manure{

     @Override
public void manuring() {
System.out.println("==我是化肥···!");
} }

然后到抽象类 农民类 Farmer:

 package design.patterns.bridge2;
/**
* 农民类
* */
public abstract class Farmer {
protected Manure manure; public Farmer(Manure manure){
this.manure = manure;
} abstract void doManuring(); }

人类农民 HumanFarmer:

 package design.patterns.bridge2;

 public class HumanFarmer extends Farmer{

     public HumanFarmer(Manure manure) {
super(manure);
} @Override
void doManuring() {
System.out.println("我是大农民,我爱劳动");
manure.manuring();
} }

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

 package design.patterns.bridge2;

 public class RobotFarmer extends Farmer{

     public RobotFarmer(Manure manure) {
super(manure);
} @Override
void doManuring() {
System.out.println("机器人也可以施肥的哦。");
manure.manuring();
} }

最后测试一下 Test类:

 package design.patterns.bridge2;

 public class Test {
public static void main(String[] args){
//开始施肥
// //1.准备肥料
// Manure manure = new AnimalManure();
//4.突然想施化肥了,
Manure manure = new ChemicalManure();
//2.人工施肥,施的是有机肥, 动物肥
Farmer farmer = new HumanFarmer(manure);
// //5.人工施肥,的确较慢,以后会有机器人施肥的
// Farmer farmer = new RobotFarmer(manure); //3.开工
work(farmer); } public static void work(Farmer farmer){
farmer.doManuring();
}
}

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

3.总结:

Strategy(策略模式)是调用者不变,变的只是被调用的方法;(候选模式嘛)
   Bridge(桥梁模式)是 调用者和被调用者都可以改变。--可以看成策略模式的加强版(更加一步)

java设计模式之桥梁模式(Bridge)的更多相关文章

  1. JAVA设计模式之桥梁模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述桥梁(Bridge)模式的: 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式. ...

  2. java 设计模式 之 桥梁模式

    桥梁模式:将抽象和实现解耦,使两者可以独立的变化.解释:将两个有组合关系,强耦合的对象,各自抽象然后解耦.(类关系图看https://www.cnblogs.com/blogxiao/p/951388 ...

  3. 桥接模式 桥梁模式 bridge 结构型 设计模式(十二)

      桥接模式Bridge   Bridge 意为桥梁,桥接模式的作用就像桥梁一样,用于把两件事物连接起来   意图 将抽象部分与他的实现部分进行分离,使得他们都可以独立的发展.  意图解析 依赖倒置原 ...

  4. Java设计模式——装饰者模式

    JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...

  5. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  6. 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)

    原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...

  7. JAVA设计模式--装饰器模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...

  8. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  9. 折腾Java设计模式之备忘录模式

    原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...

随机推荐

  1. nginx中级应用-续

    1.server下配置的每个location,都需要有自己的一套代理配置 即要么加入: root  某个目录 要么加入 proxy_pass 某个地址;  proxy_redirect off; # ...

  2. .net core 2.0 mvc 获取配置信息

    mvc_core_config *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 ...

  3. Android 开发权限设置中英对照说明详解

    android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问 "properties"表在checkin数据库中,改值可以修改上传( Al ...

  4. 比特币解锁脚本中的ScriptSignature都包含了什么东西

    比特币 解锁脚本signature script 包含了那些东西? 使用 UTXO 需要私钥签名,私钥到底都签了什么东西呢?一直比较好奇. 比特币的私钥签名总共有五中类型,具体见 btcd 代码,如下 ...

  5. OI计算几何 简单学习笔记

    学习平面几何,首先我们要会熟练地应用向量,其次也要知道一些基本的几何知识.(其实看看数学课本就可以了吧) 因为是看的蓝书,所以很多东西做了引用.(update:还参考了赵和旭dalao的讲义) 下面先 ...

  6. WebGL 一

    WebGL绘制窗口 <html><head><title>OpenGL Test</title> </head><body>&l ...

  7. less配置

    一.sublime text需要下载考拉,然后要 一直打开着: 1.编译工具用koala编译 下载地址:http://koala-app.com/index-zh.html 2.LESS中的注释: 可 ...

  8. C语言小总结

    1.函数 有时程序中要多次实现某一功能,就需要多次重复编写实现此功能的代码,这使程序不精练.因此需要模块化程序设计的思想. 函数的返回值要匹配,若函数有返回值可以不接受,但是函数没有返回值不能接受. ...

  9. Linux系统如何迁移至LVM磁盘

    今天遇到一个问题,算是比较严重的把.就是要把当前系统转移到 LVM 卷里面去,下面有一些发生过程介绍. 不感兴趣可以直接跳过,看实战部分<如何迁移系统至LVM卷> 朋友今天突然找我,说是要 ...

  10. 生产者消费者模式-Java实现

    感知阶段 随着软件业的发展,互联网用户的日渐增多,并发这门艺术的兴起似乎是那么合情合理.每日PV十多亿的淘宝,处理并发的手段可谓是业界一流.用户访问淘宝首页的平均等待时间只有区区几秒,但是服务器所处理 ...