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