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. opencv——播放视频

    #include "stdafx.h" #include <opencv2\opencv.hpp> #include <iostream> #include ...

  2. 使用st link v2向stm32下载和调试程序

    st官网 正版ST-link/V2引脚定义和注意事项 分为ST-LINK/V2和ST-LINK/V2-ISOL两种型号 是STM8和STM32微控制器(MCU)系列的在线调试器和编程器(还是下载器.仿 ...

  3. Get MAC address using POSIX APIs

    #include <stdio.h>#include <unistd.h>#include <netdb.h>#include <arpa/inet.h> ...

  4. MongoDB复制集与Raft协议异同点分析

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.日志复制流程: a.raft leader节点在接收client请求后,先将请求写到日志中,再将日志通过 ...

  5. 一文解锁BILIBILI、ACFUN等弹幕网站是如何审核视频

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 人工审核对于A站和B站都是很重要的. AcFun稿件审核通行标准(V1.1) 表明,要审核的东西非常多,除了内容本身的合规性.调性,还有画质音质.撞 ...

  6. 开启andriod手机的adbd,进行无线adb调试

    注:如果没有 root 权限也是可以试试,一般情况下,都需要 root 权限,才能连接成功.   1.需要确保你的开发 PC 和 Android 手机都连上了 wifi 并处于同一网段下: 2.开启 ...

  7. oppo手机永久打开USB调试模式

    现象:十分钟不使用就会自动关闭 usb 调试模式,重新打开还得输入验证码,真尼玛烦人. 方法: 数字拨号盘 输入 *#8011#  就可以永久打开.

  8. inception_web

    1) wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py 2) python ez_setup.py --insecur ...

  9. P1975 [国家集训队]排队 线段树套平衡树维护动态逆序对查询

    $ \color{#0066ff}{ 题目描述 }$ 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和. 红星幼儿园的小朋友们排起了长长地队伍 ...

  10. pop控制器

    1.寻找指定的控制器MineViewControllerclass UIViewController *mineVC = nil; for (UIViewController * controller ...