java设计模式之桥梁模式(Bridge)
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)的更多相关文章
- JAVA设计模式之桥梁模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述桥梁(Bridge)模式的: 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式. ...
- java 设计模式 之 桥梁模式
桥梁模式:将抽象和实现解耦,使两者可以独立的变化.解释:将两个有组合关系,强耦合的对象,各自抽象然后解耦.(类关系图看https://www.cnblogs.com/blogxiao/p/951388 ...
- 桥接模式 桥梁模式 bridge 结构型 设计模式(十二)
桥接模式Bridge Bridge 意为桥梁,桥接模式的作用就像桥梁一样,用于把两件事物连接起来 意图 将抽象部分与他的实现部分进行分离,使得他们都可以独立的发展. 意图解析 依赖倒置原 ...
- Java设计模式——装饰者模式
JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
- 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern)
原文:乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 桥接模式(Bridge Pattern) 作者:webabcd 介绍 ...
- JAVA设计模式--装饰器模式
装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰 ...
- 折腾Java设计模式之建造者模式
博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...
- 折腾Java设计模式之备忘录模式
原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's int ...
随机推荐
- select2的一些隐藏功能
select 3.5版本的说明文档里面存在 http://select2.github.io/select2/index.html option选项 sortResults query为查询字符串
- 多线程“尚未调用coinitialize” 报错
关于多线程中创建使用TADOConnect.TADODataSet等Com组件时,必须先初始化Com 在多线程启用执行前 CoInitialize(nil); 在多线程启用执行后 CoUninitia ...
- Verilog MIPS32 CPU(九)-- 顶层文件
`timescale 1ns / 1ps /////////////////////////////////////////////////////////////////////////////// ...
- oracle通过job执行procedure
1. 先创建一个FUNCTION CREATE OR REPLACE FUNCTION GET_TIMEOUT_PROGRAM(i_customerNo IN TK_CUST_PROG_D.CUSTO ...
- 学习笔记之Struts2—工作原理图
本文以Struts2的官方工作原理图作为主线讲解(参考部分书籍与视频) 1.初始概念 struts2是web.xml进行配置的一个过滤器,当web项目启动的时候,这个过滤器就会生效. 2.web.xm ...
- ZKEACMS 自定义表单的使用
ZKEACMS Core 2.2 已经发布了,其中主要添加了自定义表单的功能.使用自定义表单的功能,您可以在几分钟内就创建一个表单,并用它来收集一些信息.导出收集的信息,就可以做一些统计分析. 创建表 ...
- 《Beginning Java 7》 - 3 - Equalty 判等
== 用于判断是否为同一引用. 比如对于 String: System.out.println("abc" == "abc"); // Output: true ...
- 如何使用安卓4.4的SD卡?
安卓4.4默认情况下,后安装的程序无权写入数据到SD卡中,那么是否我们就不能用了?看了很多文章,都说要Root,随后修改配置文件.我觉得这不是很好的方法,Root之后的安卓会有很大风险,这不是最好的办 ...
- 新建MAVEN项目--pom.xml报错
使用集成了maven的Eclipse版本新建maven项目后,配置文件pom.xml会在project以及引用的xsd文件处出现错误(第一.二行报错) 其中一个报错例子: Multiple annot ...
- jxl获取excel中的合并的单元格(主要是方法介绍)
Range[] rangeCells = sheet.getMergedCells();// 返回sheet中合并的单元格数组 for (Range r : rangeCells) {//对数组遍历拿 ...