1.简介
在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。
当然,这样的例子还有很多,如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等。如果用桥接模式就能很好地解决这些问题。
2.代码
以汽车为例,汽车按消耗能源分为耗电汽车和耗油汽车,按品牌分为劳斯莱斯和某品牌
public class BridgeTest {
public static void main(String[] args) {
Brand brand = new BrandA();
Energy energy = new EnergyGasoline();
Car abs = new RollsRoyce(brand,energy);
abs.assemble();
System.out.println("------------------------");
Brand brandb = new BrandB();
Energy energye = new EnergyElectric();
Car car2 = new Lamborghini(brandb,energye);
car2.assemble();
}
}
//汽车品牌
interface Brand {
void OperationImpl();
}
//品牌具体实现化角色 - 劳斯莱斯
class BrandA implements Brand {
public void OperationImpl() {
System.out.println("汽车品牌是劳斯莱斯");
}
}
//品牌具体实现化角色 - 某品牌
class BrandB implements Brand {
public void OperationImpl() {
System.out.println("汽车品牌是某品牌");
}
}
//汽车消耗的能源
interface Energy {
void syImpl();
}
//能源具体实现化角色 - 汽油
class EnergyGasoline implements Energy {
public void syImpl() {
System.out.println("汽车消耗能源是汽油");
}
}
//能源具体实现化角色 - 电
class EnergyElectric implements Energy {
public void syImpl() {
System.out.println("汽车消耗能源是电");
}
}
//抽象化角色- 汽车
abstract class Car {
protected Brand brand;
protected Energy energy;
protected Car(Brand brand,Energy energy) {
this.brand = brand;
this.energy = energy;
}
public abstract void assemble();
}
//汽车扩展抽象化角色 - 劳斯莱斯
class RollsRoyce extends Car {
protected RollsRoyce(Brand brand,Energy energy) {
super(brand,energy);
}
public void assemble() {
System.out.println("劳斯莱斯详情如下:");
brand.OperationImpl();
energy.syImpl();
}
}
//汽车扩展抽象化角色 - 某新能源汽车
class Lamborghini extends Car {
protected Lamborghini(Brand brand,Energy energy) {
super(brand,energy);
}
public void assemble() {
System.out.println("新能源汽车详情如下:");
brand.OperationImpl();
energy.syImpl();
}
}
执行结果如下:
劳斯莱斯详情如下:
汽车品牌是劳斯莱斯
汽车消耗能源是汽油
------------------------
新能源汽车详情如下:
汽车品牌是某品牌
汽车消耗能源是电
3.使用方式
每一个属性类别(品牌,能源,长度,外观颜色···)都是一个接口,而具体属性类别(品牌下的劳斯莱斯、某品牌等)就是一个具体实现类。
汽车作为一个抽象类,劳斯莱斯和新能源汽车是其具体实现类
网友评论