桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。
桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。
桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。
桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。
结构图:
示范代码:
屋子要放的电气产品接口:
package test.edu.household.electric.appliances; public interface Refrigerator { public void displayRefrigerator(); }
package test.edu.household.electric.appliances; public interface TV { public void displayTV(); }
package test.edu.household.electric.appliances; public interface WashingMachine { public void displayWashingMachine(); }
package test.edu.household.electric.appliances.impl; import test.edu.household.electric.appliances.Refrigerator; public class HaierRefrigerator implements Refrigerator { @Override public void displayRefrigerator() { // TODO Auto-generated method stub System.out.println("这是海尔冰箱"); } }
package test.edu.household.electric.appliances.impl; import test.edu.household.electric.appliances.TV; public class HaiXinTV implements TV { @Override public void displayTV() { // TODO Auto-generated method stub System.out.println("这是海信电视"); } }
package test.edu.household.electric.appliances.impl; import test.edu.household.electric.appliances.Refrigerator; public class SamSungRefrigerator implements Refrigerator { @Override public void displayRefrigerator() { // TODO Auto-generated method stub System.out.println("这是三星冰箱"); } }
package test.edu.household.electric.appliances.impl; import test.edu.household.electric.appliances.TV; public class SamSungTV implements TV { @Override public void displayTV() { // TODO Auto-generated method stub System.out.println("这是三星电视"); } }
package test.edu.household.electric.appliances.impl; import test.edu.household.electric.appliances.WashingMachine; public class SamSungWashingMachine implements WashingMachine { @Override public void displayWashingMachine() { // TODO Auto-generated method stub System.out.println("这是三星洗衣机"); } }
package test.edu.household.electric.appliances.impl; import test.edu.household.electric.appliances.WashingMachine; public class SiemensWashingMacthine implements WashingMachine { @Override public void displayWashingMachine() { // TODO Auto-generated method stub System.out.println("这是西门子洗衣机"); } }
package test.edu.house; import test.edu.household.electric.appliances.Refrigerator; import test.edu.household.electric.appliances.TV; import test.edu.household.electric.appliances.WashingMachine; public abstract class AbsHouseElectrieAppliances { protected Refrigerator ref; protected TV tv; protected WashingMachine wm; public abstract void displayConfig(); }
package test.edu.house; import test.edu.household.electric.appliances.Refrigerator; import test.edu.household.electric.appliances.TV; import test.edu.household.electric.appliances.WashingMachine; public class NonbrandHouse extends AbsHouseElectrieAppliances{ public NonbrandHouse(Refrigerator ref,TV tv,WashingMachine wm){ super.ref = ref; super.tv = tv; super.wm = wm; } @Override public void displayConfig() { System.out.println("此屋子内的电气:"); ref.displayRefrigerator(); tv.displayTV(); wm.displayWashingMachine(); } }
package test.edu.house; import test.edu.household.electric.appliances.Refrigerator; import test.edu.household.electric.appliances.TV; import test.edu.household.electric.appliances.WashingMachine; public class SamSungHouse extends AbsHouseElectrieAppliances{ public SamSungHouse(Refrigerator ref,TV tv,WashingMachine wm){ super.ref = ref; super.tv = tv; super.wm = wm; } @Override public void displayConfig() { System.out.println("此屋子内的电气:"); ref.displayRefrigerator(); tv.displayTV(); wm.displayWashingMachine(); } }
package test.edu.client; import test.edu.house.AbsHouseElectrieAppliances; import test.edu.house.NonbrandHouse; import test.edu.house.SamSungHouse; import test.edu.household.electric.appliances.Refrigerator; import test.edu.household.electric.appliances.TV; import test.edu.household.electric.appliances.WashingMachine; import test.edu.household.electric.appliances.impl.HaiXinTV; import test.edu.household.electric.appliances.impl.HaierRefrigerator; import test.edu.household.electric.appliances.impl.SamSungRefrigerator; import test.edu.household.electric.appliances.impl.SamSungTV; import test.edu.household.electric.appliances.impl.SamSungWashingMachine; import test.edu.household.electric.appliances.impl.SiemensWashingMacthine; public class Client { /** * @param args */ public static void main(String[] args) { Refrigerator ref1 = new HaierRefrigerator(); Refrigerator ref2 = new SamSungRefrigerator(); TV tv1 = new HaiXinTV(); TV tv2 = new SamSungTV(); WashingMachine wm1 = new SamSungWashingMachine(); WashingMachine wm2 = new SiemensWashingMacthine(); AbsHouseElectrieAppliances aea1 = new SamSungHouse(ref2, tv2, wm1); AbsHouseElectrieAppliances aea2 = new NonbrandHouse(ref1, tv1, wm2); aea1.displayConfig(); aea2.displayConfig(); } }
此屋子内的电气: 这是三星冰箱 这是三星电视 这是三星洗衣机 此屋子内的电气: 这是海尔冰箱 这是海信电视 这是西门子洗衣机