本文主要是介绍【编程素质】设计模式-桥接模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1,概念
桥接模式(Bridge Pattern):
将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。
在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互。
2,场景
①需要跨越多个平台的图形和窗口系统上。
如:JDBC(提供两套接口,一个面向数据库厂商,一个面向JDBC使用者)
②需要不同的方式改变接口和实现。
3,demo
1)汽车
①需求
对于汽车有不同的类型,它们所行驶的环境(高速、公路)也在变化。在系统中如何适应这两方面的变化?
②传统做法
通过多次继承实现。
遵循了开放-封闭原则的同时,违背了类的单一职责,即一个类只有一个引起它变化的原因。
因为继承太多,难于维护,可扩展性差,重复代码也很多。
③桥接模式
package bridge_pattern;public class Main {public static void main(String[] args){AbstractRoad roadSpeedWay = new SpeedWay();roadSpeedWay.setCar(new Car());roadSpeedWay.Run();System.out.println("==============");AbstractRoad roadStreet = new Street();roadStreet.setCar(new Bus());roadStreet.Run();}
}
package bridge_pattern;//抽象汽车类
public abstract class AbstractCar {public abstract void Run();
}
package bridge_pattern;public class Car extends AbstractCar{@Overridepublic void Run() {System.out.println("小汽车在");}
}
package bridge_pattern;public class Bus extends AbstractCar{@Overridepublic void Run() {System.out.println("公共汽车在");}
}
package bridge_pattern;public abstract class AbstractRoad {private AbstractCar car;public void setCar(AbstractCar car){this.car = car;car.Run();}public abstract void Run();
}
package bridge_pattern;public class SpeedWay extends AbstractRoad{@Overridepublic void Run() {System.out.println("高速公路");}
}
package bridge_pattern;public class Street extends AbstractRoad{@Overridepublic void Run() {System.out.println("市区街道");}
}
4,优缺点
优:
①将实现和界面解耦。使抽象喝实现可以沿着各自的维度来变化。
②抽象和实现可以独立扩展。
③对于“具体的抽象类”所做的改变,不会影响到客户。
缺:
增加了复杂度。
这篇关于【编程素质】设计模式-桥接模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!