重温设计模式之桥接模式

桥接模式  Bridge Pattern

将抽象部分与实现部分分离,使它们都可以独立的变化。

小明的披萨外卖店生意越来越好,制作披萨的速度已经赶不上订单的速度,小明决定买几台自动披萨机来代替人工。

一番考察后,M品牌的披萨机和符合小明的需求。它有制作不同口味的多种机器,每种机器都可以更换大中小三种烤箱,分别烤出12寸、9寸和6寸的披萨。以后如果有新口味的要求,再买一台新披萨机就可以,原来的烤箱还能用。如果想新做新的尺寸,另外购买烤箱,原来的机器直接可以用。

这个设计真是不错,小明心想,两个维度各自变化,互不影响,极大提高了扩展性,这就是软件开发中的桥接模式啊。

UML图:

代码:

public interface Oven {

    String bake();
}
public class BigOven implements Oven {
    @Override
    public String bake() {
        return "12寸";
    }
}
public class MiddleOven implements Oven {
    @Override
    public String bake() {
        return "9寸";
    }
}
public class SmallOven implements Oven {
    @Override
    public String bake() {
        return "6寸";
    }
}
public abstract class PizzaMachine {
    protected Oven oven;

    public void setOven(Oven oven) {
        this.oven = oven;
    }

    public abstract String bake();
}
public class SeafoodPizzaMachine extends PizzaMachine {
    @Override
    public String bake() {
        return oven.bake() + "海鲜披萨";
    }
}
public class FruitsPizzaMachine extends PizzaMachine {
    @Override
    public String bake() {
        return oven.bake() + "水果披萨";
    }
}

客户端:

public class Client {

    public static void main(String[] args) {

        PizzaMachine pizzaMachine = new SeafoodPizzaMachine();
        pizzaMachine.setOven(new BigOven());
        System.out.println(pizzaMachine.bake());

        pizzaMachine.setOven(new SmallOven());
        System.out.println(pizzaMachine.bake());

        pizzaMachine = new FruitsPizzaMachine();
        pizzaMachine.setOven(new MiddleOven());
        System.out.println(pizzaMachine.bake());
    }
}
12寸海鲜披萨
6寸海鲜披萨
9寸水果披萨

桥接模式的核心是使用合成代替继承。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值