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

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

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

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

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

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

场景,农民施肥。

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

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

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

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

肥料接口 Manure:

1 package design.patterns.bridge2;
2 /**
3  * 肥料类
4  * */
5 public interface Manure {
6     void manuring();
7 }

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

有机肥类,动物肥类 AnimalManure:

 1 package design.patterns.bridge2;
 2
 3 public class AnimalManure implements Manure{
 4
 5     @Override
 6     public void manuring() {
 7         System.out.println("==这是动物肥料,也就是翔····");
 8     }
 9
10 }

化肥类 ChemicalManure:

 1 package design.patterns.bridge2;
 2
 3 public class ChemicalManure implements Manure{
 4
 5     @Override
 6     public void manuring() {
 7         System.out.println("==我是化肥···!");
 8     }
 9
10 }

然后到抽象类 农民类 Farmer:

 1 package design.patterns.bridge2;
 2 /**
 3  * 农民类
 4  * */
 5 public abstract class Farmer {
 6     protected Manure manure;
 7
 8     public Farmer(Manure manure){
 9         this.manure = manure;
10     }
11
12     abstract void doManuring();
13
14 }

人类农民 HumanFarmer:

 1 package design.patterns.bridge2;
 2
 3 public class HumanFarmer extends Farmer{
 4
 5     public HumanFarmer(Manure manure) {
 6         super(manure);
 7     }
 8
 9     @Override
10     void doManuring() {
11         System.out.println("我是大农民,我爱劳动");
12         manure.manuring();
13     }
14
15 }

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

 1 package design.patterns.bridge2;
 2
 3 public class RobotFarmer extends Farmer{
 4
 5     public RobotFarmer(Manure manure) {
 6         super(manure);
 7     }
 8
 9     @Override
10     void doManuring() {
11         System.out.println("机器人也可以施肥的哦。");
12         manure.manuring();
13     }
14
15 }

最后测试一下 Test类:

 1 package design.patterns.bridge2;
 2
 3 public class Test {
 4     public static void main(String[] args){
 5         //开始施肥
 6 //        //1.准备肥料
 7 //        Manure manure = new AnimalManure();
 8         //4.突然想施化肥了,
 9         Manure manure = new ChemicalManure();
10         //2.人工施肥,施的是有机肥, 动物肥
11         Farmer farmer = new HumanFarmer(manure);
12 //        //5.人工施肥,的确较慢,以后会有机器人施肥的
13 //        Farmer farmer = new RobotFarmer(manure);
14
15
16         //3.开工
17         work(farmer);
18
19     }
20
21     public static void work(Farmer farmer){
22         farmer.doManuring();
23     }
24 }

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

3.总结:

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

时间: 2024-10-09 16:22:02

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

JAVA设计模式之桥梁模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述桥梁(Bridge)模式的: 桥梁模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”. 桥梁模式的用意 桥梁模式虽然不是一个使用频率很高的模式,但是熟悉这个模式对于理解面向对象的设计原则,包括“开-闭”原则以及组合/聚合复用原则都很有帮助.理解好这两个原则,有助于形成正确

java 设计模式 之 桥梁模式

桥梁模式:将抽象和实现解耦,使两者可以独立的变化.解释:将两个有组合关系,强耦合的对象,各自抽象然后解耦.(类关系图看https://www.cnblogs.com/blogxiao/p/9513883.html 这篇文章) 下面以公司生产产品为例子. 1.小汽车公司生产小汽车.这里有两个对象:汽车公司和小汽车.这两个是聚合的关系.类关系图如下: 业务逻辑就是:汽车公司生产汽车产品 2.缺点:扩展性差,当有是个产品需要生产的时候,此时需要在往这里面的增加十个产品类.当有多个公司生产多个产品的时候

如何让孩子爱上设计模式 ——10.桥接模式(Bridge Pattern)

如何让孩子爱上设计模式 --10.桥接模式(Bridge Pattern) 我有故事,你有酒吗?这年头写个技术文不讲个故事都不行,行,我讲: 还有发现很多的技术博文都开始有喜欢往文中插入几个表情的趋势了, 但是你真的插的姿势对了吗?这种事情不是随便插的,来来来,给你 见识下如何在适当的场景插入适当的表情以让读者感觉到易可赛艇, 本文以讲故事插表情为主,讲述桥接模式为辅,多图预警, 简书上排版可能有些问题,最佳排版可见: https://www.zybuluo.com/coder-pig/note

图解Java设计模式之桥接模式

图解Java设计模式之桥接模式 手机操作问题 传统方案解决手机操作问题 传统方案解决手机操作问题分析 桥接模式(Bridge)-基本介绍 桥接模式解决手机操作问题 桥接模式在JDBC中的源码解析 桥接模式的注意事项和细节 桥接模式其它应用场景 手机操作问题 现在对不同手机类型的不同品牌实现操作编程(比如 :开机.关机.上网.打电话等等),如图 : 传统方案解决手机操作问题 传统方法对应的类图 传统方案解决手机操作问题分析 1)扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各

JAVA设计模式之代理模式

学编程吧JAVA设计模式之代理模式发布了,欢迎通过xuebiancheng8.com来访问 一.概述 给某一个对象提供一个代理,并由代理对象来完成对原对象的访问.代理模式是一种对象结构型模式. 二.适用场景 当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口. 三.UML类图 四.参与者 1.接口类:Subject 它声明了真实访问者和代理访问者的共同接口,客户端通常需要针对接口角色进行编程. 2.代理类

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

1 工厂模式简介 工厂模式的定义:简单地说,用来实例化对象,代替new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式可以动态决定将哪一个类实例化,不用先知道每次要实例化哪一个类. 工厂模式可以分一下三种形态: 简单工厂 (Simple Factory)模式:又称静态工厂模式(StaticFactory). 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory). 抽象工厂 (Abstract Factroy)模式:又称工具箱模式

浅析JAVA设计模式之工厂模式(二)

1 工厂方法模式简介 工厂方法 (Factroy Method) 模式:又称多态性工厂模式(Polymorphic Factory),在这种模式中,核心工厂不再是一个具体的类,而是一个抽象工厂,提供具体工厂实现的接口,具体创建产品交由子工厂去做,抽象工厂不涉及任何产品被实例化的细节.而不同等级的产品,就对应一个不同等级的工厂,如下图. 图1 1.1工厂方法模式(多态性工厂模式): 工厂方法模式有三个角色: 1. 抽象产品接口 2. 具体产品类 3. 抽象工厂接口 4.具体工厂类. 1.2工厂方法

JAVA设计模式(3)----代理模式

1.  什么是代理模式?Proxy Pattern 代理模式定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 通俗的讲,代理模式就是我很忙没空理你,你要想找我可以先找我的代理人,代理人和被代理人继承同一个接口.代理人虽然不能干活,但是被代理的人可以干活. 这个例子中有水浒传中的这么几个人:名垂青史的潘金莲,王婆,西门大官人.西门庆想要找潘金莲,需要找王婆做代理.首先定义一个接口:Kin

java设计模式------装饰着模式

java设计模式-------装饰者模式 装饰者模式 Decorator模式(别名Wrapper):动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案.主要有组件(components)和装饰器(Decorator)组成.要求components和Decorator实现相同的接口或者抽象类(具体类的局限性太大). 设计原则.模式特点.适用性 - 1. 多用组合,少用继承. 利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为.然而,如果能够利用