设计模式之桥接模式
1.桥接模式概念
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
2.桥接模式的关键组成部分
1)抽象 (Abstraction): 定义使用实现部分的接口
2)细化抽象 (Refined Abstraction): 扩展抽象类,为实现部分定义新的接口。
3)实现者 (Implementor): 定义实现部分的接口。
4)具体实现者 (Concrete Implementors): 实现实现者接口,并提供具体的实现方法。
3.举个栗子
以车的类型和颜色为例:车的类型可以有很多中(小汽车,卡车,拖拉机等等),汽车的颜色也可以有很多中(红色,白色,黑色等)。
4.代码实现
1)ColorType接口
package org.xiji.brige;public interface CarType {/**** 获取车类型*/String getType();
}
2)LorryCar实现类
package org.xiji.brige;/*** 货车*/
public class LorryCar implements CarType{@Overridepublic String getType() {return "货车";}
}
3)BusCar实现类
package org.xiji.brige;/*** 客车*/
public class BusCar implements CarType{@Overridepublic String getType() {return "客车";}
}
4)CarColor实现类
package org.xiji.brige;/*** 车抽象类*/
public abstract class CarColor {/*** 车类型*/protected CarType carType;public CarColor(CarType carType) {this.carType = carType;}/**** 抽象方法*/public abstract String getCarColor();/*** 介绍汽车*/public void introduceCar(){System.out.println("这是"+carType.getType()+"是"+getCarColor());}
}
5)RedCar实现类
package org.xiji.brige;/*** 红色*/
public class RedCar extends CarColor{public RedCar(CarType carType) {super(carType);}@Overridepublic String getCarColor() {return "红色";}
}
6)BlackCar实现类
package org.xiji.brige;/*** 黑色*/
public class BlackCar extends CarColor{public BlackCar(CarType carType) {super(carType);}@Overridepublic String getCarColor() {return "黑色";}
}
7)桥接测试类
package org.xiji.brige;/*** 桥接模式测试类*/
public class BridgeMain {public static void main(String[] args) {//创建车的类型//货车LorryCar lorryCar = new LorryCar();//客车BusCar busCar = new BusCar();//创建红色客车System.out.println("=================================");RedCar redBusCar = new RedCar(busCar);redBusCar.introduceCar();System.out.println("=================================");//创建红色的货车System.out.println("=================================");RedCar redLorryCar = new RedCar(lorryCar);redLorryCar.introduceCar();System.out.println("=================================");//创建黑色的客车System.out.println("=================================");BlackCar blackBusCar = new BlackCar(busCar);blackBusCar.introduceCar();System.out.println("=================================");//创建黑色的货车System.out.println("=================================");BlackCar blackLorryCar = new BlackCar(lorryCar);blackLorryCar.introduceCar();System.out.println("=================================");}
}
8)测试结果