BRIDGE?早上碰到MM,要说早上好,晚上碰到MM,要说晚上好;碰到MM穿了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题,自己用BRIDGE组合一下不就行了 桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。
也就是说:将抽象和行为划分开来,各自独立,但能动态的结合.
接下来以杯子和液体来举例:
杯子有大杯子,也有小杯子;
液体这里以牛奶和水举例:
牛奶既可以放入大杯子,也可放入小杯子,水也一样。
首先定义液体类:
public abstract class Liquid { void fillwith(){}; }
然后定义杯子类:
public abstract class Tazas { Liquid liquid; void fillWidth(){ } }
大杯子类:
public class BigTazas extends Tazas{ @Override void fillWidth() { super.fillWidth(); liquid.fillwith(); System.out.println("大杯子"); } }
小杯子类:
public class SmallTazas extends Tazas{ @Override void fillWidth() { super.fillWidth(); liquid.fillwith(); System.out.println("小杯子"); } }
牛奶类:
public class Milk extends Liquid { @Override void fillwith() { // TODO Auto-generated method stub super.fillwith(); System.out.println("牛奶放入"); } }
水类:
public class Water extends Liquid { @Override void fillwith() { // TODO Auto-generated method stub super.fillwith(); System.out.println("水放入"); } }
测试的类:
public class Main { public static void main(String[] args) { Tazas tazas = new BigTazas(); tazas.liquid = new Water(); tazas.fillWidth(); System.out.println("------------"); Tazas tazas1 = new SmallTazas(); tazas1.liquid = new Milk(); tazas1.fillWidth(); System.out.println("------------"); Tazas tazas2 = new SmallTazas(); tazas2.liquid = new Water(); tazas2.fillWidth(); System.out.println("------------"); Tazas tazas3 = new BigTazas(); tazas3.liquid = new Milk(); tazas3.fillWidth(); } }
运行结果:
水放入
大杯子
------------
牛奶放入
小杯子
------------
水放入
小杯子
------------
牛奶放入大杯子