//20210120
写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现桥接模式
桥接模式核心思想
- 实现多对多模式,比如很多品牌的汽车要跑很多种类的路,汽车的品牌和路的种类是多对多的关系,如果一一映射实现的话,会非常浪费资源,不如创建一个虚拟的桥的概念,让配对的车和路在桥上相遇,这样就实现了类的种类数 = 车品牌数 + 路的种类数,而不用穷举每一种映射,而且使用桥接模式也很符合开闭原则,不用动抽象类,直接增加扩展包即可
- 理解如图:
程序源代码如下:
//车辆抽象类
public abstract class Car {
protected Road road;
protected String name;
//设置手机软件
public void setRoad(Road road){
this.road = road;
}
//运行
public abstract void run();
public abstract String getName();
}
//吉普车实现类
public class Jeep extends Car {
public Jeep(){
this.name = "吉普车";
}
public String getName() {
return name;
}
@Override
public void run() {
road.run();
}
}
//公交车实现类
public class Bus extends Car{
public Bus(){
this.name = "公交车";
}
public String getName() {
return name;
}
@Override
public void run() {
road.run();
}
}
//皮卡实现类
public class PickUpTruck extends Car {
public PickUpTruck(){
this.name = "皮卡";
}
public String getName() {
return name;
}
@Override
public void run() {
road.run();
}
}
//道路抽象类
public abstract class Road {
public abstract void run();
}
//沙路实现类
public class SandRoad extends Road {
@Override
public void run() {
System.out.println("在沙子路上跑");
}
}
//石头路实现类
public class StoneRoad extends Road {
@Override
public void run() {
System.out.println("在石头路上跑");
}
}
//公路实现类
public class HighWayRoad extends Road{
@Override
public void run() {
System.out.println("在公路上跑");
}
}
//测试主类
public class Main {
public static void main(String[] args) {
Car jeep;
jeep = new Jeep();
System.out.println(jeep.getName());
jeep.setRoad(new StoneRoad());
System.out.print(jeep.getName()+": ");
jeep.run();
jeep.setRoad(new SandRoad());
System.out.print(jeep.getName()+": ");
jeep.run();
jeep.setRoad(new HighWayRoad());
System.out.print(jeep.getName()+": ");
jeep.run();
System.out.println("=====================");
Car bus;
bus = new Bus();
System.out.println(bus.getName());
bus.setRoad(new HighWayRoad());
System.out.print(bus.getName()+": ");
bus.run();
System.out.println("=====================");
Car pickUpTruck;
pickUpTruck = new PickUpTruck();
System.out.println(pickUpTruck.getName());
pickUpTruck.setRoad(new SandRoad());
System.out.print(pickUpTruck.getName()+": ");
pickUpTruck.run();
pickUpTruck.setRoad(new HighWayRoad());
System.out.print(pickUpTruck.getName()+": ");
pickUpTruck.run();
}
}
- 输出如下:
总结:
- 这样我们新增道路种类和车辆种类,直接新建类即可,而不用改动框架源代码
以上
希望对大家有所帮助