JAVA 23种设计模式之结构型模式—桥接模式(10)

桥接模式定义:

桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。

桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。

我们路和汽车为例

路是固定的,比如,城市街道,告诉公路等

而汽车却是不固定的,比如他有小汽车,公共汽车,自行车等

以下代码实例:

首先我们定义固定的路


public interface IRoad {
	public String run();
}
public class Street implements IRoad {
	@Override
	public String run() {
		return "市区街道";	
	}
}
public class SpeedWay implements IRoad{
	@Override
	public String run() {
		return "高速公路";
	}
}
以上定义了两种类,城市街道和告诉公路
下面我们定义车:


首先,每一种车他会跑

public abstract class abscarsize {
	IRoad road;
	public abscarsize(IRoad road){
		this.road = road;
	}
	public abstract void carname();
}
定义三种车:小汽车,公共汽车,自行车

public class sizecar extends abscarsize{

	public sizecar(IRoad road) {
		super(road);
		// TODO 自动生成的构造函数存根
	}

	@Override
	public void carname() {
		System.out.println("小汽车在"+super.road.run());
		
	}

}

public class publiccar extends abscarsize{

	public publiccar(IRoad road) {
		super(road);
		// TODO 自动生成的构造函数存根
	}

	@Override
	public void carname() {
		System.out.println("公共汽车在"+super.road.run());
		
	}

}

public class Bicycle extends abscarsize{

	public Bicycle(IRoad road) {
		super(road);
		// TODO 自动生成的构造函数存根
	}

	@Override
	public void carname() {
		if(road  instanceof SpeedWay){
			System.out.println("自行车不能在"+super.road.run());
		}else{
			System.out.println("自行车在"+super.road.run());
		}
		
		
	}

}
注意上面的代码,自行车类中,我们定义了,自行车是不能在高速公路上行驶的

测试代码demo

new sizecar(street).carname();
new publiccar(street).carname();
new sizecar(speedway).carname();
new publiccar(speedway).carname();
System.out.println();
new Bicycle(street).carname();
new Bicycle(speedway).carname();

小汽车在市区街道
公共汽车在市区街道
小汽车在高速公路
公共汽车在高速公路

自行车在市区街道
自行车不能在高速公路

大家可以看到输出的结果是不是我们想要的呢。

如果我们增加一辆车,只需要该车继承了抽象类abscarsize即可,而无需去改动其他的代码,这是符合开闭原则的


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img