Android设计模式之桥接模式

2017-10-17  本文已影响0人  TangBuzhi

桥接模式

1.定义:

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

2.使用场景:

3.UML图

4.详解:

桥接模式也称为桥梁模式,是一种结构型设计模式。其主要承担着连接两边(抽象部分与实现部分)的作用在,实际开发中,任何多维度变化类或者多个树状类之间的耦合都可以使用桥接模式来实现解耦。
在现实生活中,制作咖啡,有可能加糖或不加糖,咖啡的杯子可能是大的或小的,下面就以这个制作咖啡的例子,详细阐述桥接模式:

public interface CoffeAdd {
        String addSomething();
    }

    public static class Sugar implements CoffeAdd {
        @Override
        public String addSomething() {
            return "加糖";
        }
    }

    public static class Ordinary implements CoffeAdd {
        @Override
        public String addSomething() {
            return "原味";
        }
    }

上面定义了一个向咖啡里添加物品的接口,然后有两个具体的实现类:加糖(Sugar )与原味(Ordinary );
下面看制作咖啡的抽象类及其子类,可以看出,制作咖啡的抽象类(Coffe )持有了咖啡添加物的实例(CoffeAdd ),这就是上面所述的“抽象”与“实现”,Coffe对应于抽象部分,CoffeAdd对应于实现部分:

    public static abstract class Coffe {
        protected CoffeAdd coffeAdd;

        public Coffe(CoffeAdd coffeAdd) {
            this.coffeAdd = coffeAdd;
        }

        public abstract void makeCoffe();
    }

    public static class LargeCoffe extends Coffe {
        public LargeCoffe(CoffeAdd coffeAdd) {
            super(coffeAdd);
        }

        @Override
        public void makeCoffe() {
            System.out.println("大杯的" + coffeAdd.addSomething() + "咖啡");
        }
    }

    public static class SmallCoffe extends Coffe {
        public SmallCoffe(CoffeAdd coffeAdd) {
            super(coffeAdd);
        }

        @Override
        public void makeCoffe() {
            System.out.println("小杯的" + coffeAdd.addSomething() + "咖啡");
        }
    }

测试代码:

public static void main(String[] args) {
        Sugar sugar = new Sugar();
        Ordinary ordinary = new Ordinary();

        LargeCoffe largeSugerCoffe = new LargeCoffe(sugar);
        largeSugerCoffe.makeCoffe();//大杯的加糖咖啡

        LargeCoffe largeOrdinaryCoffe = new LargeCoffe(ordinary);
        largeOrdinaryCoffe.makeCoffe();//大杯的原味咖啡

        SmallCoffe smallSugarCoffe = new SmallCoffe(sugar);
        smallSugarCoffe.makeCoffe();//小杯的加糖咖啡

        SmallCoffe smallOrdinaryCoffe = new SmallCoffe(ordinary);
        smallOrdinaryCoffe.makeCoffe();//小杯的原味咖啡
    }

从输出结果一看便知,各种各样的咖啡均可制作出来了。
但是此时,如果想要制作中杯的咖啡呢?又或者想要给咖啡里加奶呢?其实很简单,上面已经定义了Coffe类以及CoffeAdd接口,仅需要再定义两个类,一个继承Coffe,一个实现CoffeAdd即可,见代码:

public static class MiddleCoffe extends Coffe {
        public MiddleCoffe(CoffeAdd coffeAdd) {
            super(coffeAdd);
        }

        @Override
        public void makeCoffe() {
            System.out.println("中杯的" + coffeAdd.addSomething() + "咖啡");
        }
    }

    public static class Milk implements CoffeAdd {
        @Override
        public String addSomething() {
            return "加奶";
        }
    }

测试代码就不再赘述了,相信大家都会明白。

5.代码托管地址

桥接模式

上一篇下一篇

猜你喜欢

热点阅读