目录
说明
目标
实现方式
应用场景
其他链接
说明
结构型模式之一,其他还有适配器模式、装饰模式、组合模式、外观模式、享元模式、代理模式
目标
用抽象关联取代了多层继承,将类之间的静态继承关系转换为动态的对象组合关系
实现方式
说是咖啡店开张,大家都来捧个场。为了迎合顾客的口味,店里的咖啡有很多种料可以添加,这里简单地以加糖和加奶来举例。当然还有别的,这显然是多维的,可以有不同种排列组合,比如加奶不加糖,加糖不加奶等等。这就需要用桥接模式(Bridge Pattern)了:
/*** 桥接模式(这里有两个变化维度,咖啡的容量和口味,而且都需要独立变化。如果使用继承的方式,随着变化类就会急剧的增加)* 桥接模式用一种巧妙的方式处理多层继承存在的问题, 用抽象关联取代了多层继承,将类之间的静态继承关系转换为动态的对象组合关系* @author ZRH* @version 1.0.0* @date /7/22*/public class Bridge {public static void main(String[] args) {// 第三步:客户端调用// 点两杯加奶的大杯咖啡(通过使用桥接模式,就使得咖啡的容量和口味这两个维度可以独立变化,互不干扰)// 通过构造器传添加物,起桥接作用RefinedCoffee largeWithMilk = new LargeCoffee(new Milk());largeWithMilk.orderCoffee(2);largeWithMilk.checkQuality();// 点一杯加奶的大杯咖啡largeWithMilk = new LargeCoffee(new Sugar());largeWithMilk.orderCoffee(1);largeWithMilk.checkQuality();}}/*** 第一步:创建抽象化部分:抽象化Abstraction* <p>** @author ZRH* @version 1.0.0* @date -07-22*/abstract class Coffee {/*** 添加配料*/protected ICoffeeAdditives additives;public Coffee(ICoffeeAdditives additives) {this.additives = additives;}/*** 咖啡下单* <p>** @param count* @author : ZRH* @version : 1.0.0* @date : -07-22*/public abstract void orderCoffee(int count);}/*** 下面是一个对抽象化修正的一个类,里面增加了一个品控的方法.RefinedAbstraction* <p>** @author ZRH* @version 1.0.0* @date -07-22*/abstract class RefinedCoffee extends Coffee {public RefinedCoffee(ICoffeeAdditives additives) {super(additives);}public void checkQuality() {Random ran = new Random();System.out.println(String.format("%s添加%s", additives.getClass().getSimpleName(), ran.nextBoolean() ? "太多" : "正常"));}}class LargeCoffee extends RefinedCoffee {public LargeCoffee(ICoffeeAdditives additives) {super(additives);}/*** 下单大杯的咖啡* <p>** @param count* @author : ZRH* @version : 1.0.0* @date : -07-22*/@Overridepublic void orderCoffee(int count) {additives.addSomething();System.out.println("下单大杯咖啡" + count + "杯");}}/*** 第二步:创建实现化部分*/interface ICoffeeAdditives {/***添加配料* <p>* @author : ZRH* @version : 1.0.0* @date : -07-22*/void addSomething();}/*** 加奶*/class Milk implements ICoffeeAdditives {@Overridepublic void addSomething() {System.out.println("加奶");}}/*** 加糖*/class Sugar implements ICoffeeAdditives {@Overridepublic void addSomething() {System.out.println("加糖");}}
应用场景
对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用JDBC驱动程序 转账分类: 网上转账,柜台转账,AMT转账 转账用户类型:普通用户,银卡用户,金卡用户消息类型:即时消息,延时消息 消息分类:手机短信,邮件消息,QQ消息其他链接
【Java设计模式】简单学工厂模式
【Java设计模式】简单学抽象工厂模式
【Java设计模式】简单学建造者模式
【Java设计模式】简单学单例模式
【Java设计模式】简单学原型模式
【Java设计模式】其他模式~
如果觉得《【Java设计模式】简单学桥接模式——来杯大杯加奶不加糖咖啡》对你有帮助,请点赞、收藏,并留下你的观点哦!