目录
传统解决
将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。
Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。
用来解决有多种分类问题:
桥接模式类图
接口
- //接口
- public interface Brand {
- void open();
- void close();
- void call();
- }
实现类
- public class Vivo implements Brand {
- @Override
- public void open() {
- // TODO Auto-generated method stub
- System.out.println(" Vivo手机开机 ");
- }
- @Override
- public void close() {
- // TODO Auto-generated method stub
- System.out.println(" Vivo手机关机 ");
- }
- @Override
- public void call() {
- // TODO Auto-generated method stub
- System.out.println(" Vivo手机打电话 ");
- }
- }
抽象类(桥)
- public abstract class Phone {
- //组合品牌
- private Brand brand;
- //构造器
- public Phone(Brand brand) {
- this.brand = brand;
- }
- protected void open() {
- this.brand.open();
- }
- protected void close() {
- brand.close();
- }
- protected void call() {
- brand.call();
- }
- }
子类
- public class UpRightPhone extends Phone {
- //构造器
- public UpRightPhone(Brand brand) {
- super(brand);
- }
- public void open() {
- super.open();
- System.out.println(" 直立样式手机 ");
- }
- public void close() {
- super.close();
- System.out.println(" 直立样式手机 ");
- }
- public void call() {
- super.call();
- System.out.println(" 直立样式手机 ");
- }
- }
client
- public class Client {
- public static void main(String[] args) {
- //获取折叠式手机 (样式 + 品牌 )
- Phone phone1 = new FoldedPhone(new XiaoMi());
- phone1.open();
- phone1.call();
- phone1.close();
- System.out.println("=======================");
-
- Phone phone2 = new FoldedPhone(new Vivo());
- phone2.open();
- phone2.call();
- phone2.close();
- System.out.println("==============");
-
- UpRightPhone phone3 = new UpRightPhone(new XiaoMi());
- phone3.open();
- phone3.call();
- phone3.close();
- System.out.println("==============");
-
- UpRightPhone phone4 = new UpRightPhone(new Vivo());
- phone4.open();
- phone4.call();
- phone4.close();
- }
- }
Jdbc的 Driver接口,如果从桥接模式来看,Driver就是一个接口,下面可以有MySQL 的 Driver,Oracle的Driver,这些就可以当做实现接口类。