桥接模式(设计模式学习笔记)

桥接模式

  • 基本介绍
  1. 桥接模式(Bridge 模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。
  2. 是一种结构型设计模式(基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责)。
  3. 特点:把抽象(Abstraction)与行为实现(Implementation)分离开来,解耦合,保持各个功能的独立性和可扩展性
  • 例题:
    对不同的学科进行归类调用:
    在这里插入图片描述
    原始的解决方案:
    在这里插入图片描述

分析:

  1. 扩展性问题(类爆炸),倘若我们要是再增加一个学科类,同样还需要增加对应的具体学科下的项目

  2. 违反了单一职责原则,当我们增加一个样式时,要同时调整增加其他的类,无形中增加了代码维护成本.

  3. 解决方案:
    在这里插入图片描述

Study接口类:

package Bridge;

public interface Study {
	void open();

	void close();

}

具体的实现子类:1.Java类

package Bridge;

public class Java implements Study{

	@Override
	public void open() {
		// TODO Auto-generated method stub
		System.out.println("Javaopen");
	}

	@Override
	public void close() {
		// TODO Auto-generated method stub
		System.out.println("Javaclose");
	}


}

2.Jdbc类:

package Bridge;

public class Jdbc implements Study{

	@Override
	public void open() {
		// TODO Auto-generated method stub
		System.out.println("Jdbcopen");
	}

	@Override
	public void close() {
		// TODO Auto-generated method stub
		System.out.println("TJdbcclose");
	}

	

}

学科类:project

package Bridge;

public abstract class Project {
	private Study b;

	public Project(Study b) {
		super();
		this.b = b;
	}
	public void open() {
		b.open();
	}
	public void close() {
		b.close();
	}
	
}

学科类对应的子类(赋予具体学科分类)

package Bridge;

public class P1 extends Project {

	public P1(Study b) {
		super(b);
		// TODO Auto-generated constructor stub
	}

	public void open() {
		super.open();
		System.out.println("数据库");
	}
	public void close() {
		super.close();
		System.out.println("数据库");
	}

}

package Bridge;

public class P2 extends Project{

	public P2(Study b) {
		super(b);
		// TODO Auto-generated constructor stub
	}
	public void open() {
		super.open();
		System.out.println("后端");
	}
	public void close() {
		super.close();
		System.out.println("后端");
	}
	

}

最终客户端调用测试:Client

package Bridge;

public class Client {
	public static void main(String[] args) {
		Project p = new P1(new Jdbc());
		p.open();
		p.close();
		
		System.out.println("=============");
		Project d = new P1(new Java());
		d.close();
		d.open();
		
		System.out.println("=============");
		Project s = new P2(new Jdbc());
		s.close();
		s.open();
	}
}

上图具体类分析:

Client 类:桥接模式的调用者抽象类(Project) :维护了 Study 即它的实现类 Java,Jdbc…, 二者是聚合关系
Project充当桥接类
P1/P2: 抽象类的子类
Study : 行为实现类的接口
Java/Jdbc :行为的具体实现类
UML 图:这里的抽象类和接口是聚合的关系,其实调用和被调用关系

注意事项

  1. 实现了抽象和实现部分的分离,提高了系统分层设计的灵活性,从而产生更好的结构化系统。

  2. 对于系统的高层部分,只需要知道抽象部分和实现部分的接口就可以了,其它的部分由具体业务来完成。

  3. 桥接模式替代多层继承方案,可以减少子类的个数,降低系统的管理和维护成本。

  4. 桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设 计和编程

  5. 桥接模式要求正确识别出系统中两个独立变化的维度(抽象、和实现),因此其使用范围有一定的局限性,即需 要有这样的应用场景。

  6. java中在JDBC 驱动程序中运用到桥接模式(银行管理、转账处理、消息管理)

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页