设计模式——桥接模式的学习与理解

什么是桥接模式

桥接模式是指将抽象和实现分离开来,使得它们可以保持独立存在。这个模式基于类的最小设计原则(最少的修改代码),多用于替代多层继承方案,以减少类的个数,防止类爆炸。

对照——传统的多层继承方案

想要学习一个设计模式,首要的就是了解这个设计模式解决什么。

我们假设一个案例:
要开发一套手机图片浏览App,他可以在ios,Android上使用,可以查看JPG,PNG格式的文件。

如果采用传统的多层继承方案的类图将是这样的
在这里插入图片描述
我们可以看到,如果我们再增加一个新的系统类型,还需要增加3个类(包括一个新系统类和两个图片格式类);如果我们再增加一个新的图片格式,也需要在各个系统下各增加一个类。那么这就会引发类的扩展性问题,也就是类爆炸。甚至当我们增加新的功能的时候需要修改所有的类,代码的维护成本变得很高

对照——桥接模式

我们再看一下使用桥接模式的案例类图:
在这里插入图片描述
可以看出来这个类图很像一个桥,通过桥把左边的抽象类和右边的实现接口聚合到了一起,其实就是调用与被调用的关系。并且通过分析我们可以发现不管是新增加新的系统还是增加新的图片格式我们都仅仅需要增加一个类就可以完成。

这个类图有这几部分构成:

  1. 抽象类App:它的主要作用是维护接口和接口的实现类Jpg和Png,以聚合的方式充当桥接类。
  2. AndroidApp和iOSApp类:它们是抽象类App的子类。
  3. Format接口:它是实现类的接口。
  4. Jpg和Png类:它们是具体是实现类。

桥接模式的案例代码

实现类接口Format

package bridge;

//实现类的接口,定义see()的方法
public interface Format {
	
	void see();
}

实现类Jpg

package bridge;

//具体实现类Jpg
public class Jpg implements Format {

	@Override
	public void see() {
		// TODO Auto-generated method stub
		System.out.println("正在浏览jpg图片");
	}

}

实现类Png

package bridge;

//具体实现类Png
public class Png implements Format{

	@Override
	public void see() {
		// TODO Auto-generated method stub
		System.out.println("正在浏览png图片");
	}

}

抽象类App

package bridge;

//抽象的桥接类app
public abstract class App {
	
	//聚合格式
	private Format format;

	//构造器
	public App(Format format) {
		super();
		this.format = format;
	}
	
	//调用接口的方法
	protected void see() {
		format.see();
	}
}

AndroidApp类

package bridge;

//AndroidApp类继承app类并重写其方法
public class AndroidApp extends App{

	//构造器
	public AndroidApp(Format format) {
		super(format);
	}

	@Override
	public void see() {
		super.see();
		System.out.print("Android系统app");
	}
}

IOSApp类

package bridge;

//IOSApp继承app类并重写其方法
public class IOSApp extends App{
	
	//构造器
	public IOSApp(Format format) {
		super(format);
	}

	@Override
	public void see() {
		super.see();
		System.out.print("iOS系统app");
	}
}

客户端 Client

package bridge;

//客户端 Client
public class Client {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//获取系统+格式
		App app1=new AndroidApp(new Jpg());
		app1.see();
		App app2=new AndroidApp(new Png());
		app2.see();
		System.out.println("*************");
		App app3=new IOSApp(new Jpg());
		app3.see();
		App app4=new IOSApp(new Png());
		app4.see();

	}

}

运行截图
在这里插入图片描述
详细类图
在这里插入图片描述

总结

  1. 桥接模式通过抽象和实现的分离,增大了系统的灵活性。
  2. 系统的高层部分只需要知道抽象部分和实现部分的接口,不需要管理具体的实现业务。
  3. 桥接模式可以替代多层继承方案,更方便系统进行分层设计,从而产生更好的结构化系统。
  4. 桥接模式的应用场景需要有两个独立的维度,尤为适用不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统。
    希望对看到这里的诸位有所帮助,如果喜欢这篇个人理解不妨点一个赞,谢谢~。
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值