桥接模式定义:
桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。
桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。
我们路和汽车为例
路是固定的,比如,城市街道,告诉公路等
而汽车却是不固定的,比如他有小汽车,公共汽车,自行车等
以下代码实例:
首先我们定义固定的路
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/天,具体规则查看活动详情