【设计模式】桥接模式

1. 分类

  • 结构型模式
    • 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题
    • 分类:
      • 适配器模式、代理模式、桥接模式、装饰模式、组合模式、外观模式、享元模式

2. 简介

在这里插入图片描述
我们可用多层继承结构实现上图的关系

  • 问题:
    • 扩展性问题(类个数膨胀问题):
      • 如果要增加一个新的电脑类型:智能手机,则要增加各个品牌下面的类
      • 如果要增加一个新的品牌,也要增加各种电脑类型的类
    • 违反单一职责原则:
      • 一个类:联想笔记本,有两个引起这个类变化的原因

  • 桥接模式核心要点:
    • 处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联

3. 代码测试

创建电脑品牌

/**
 * 电脑品牌(新增品牌的话实现此接口即可,电脑类型无需改动)
 */
public interface Brand {
	void sale();
}

/**
 * Lenovo品牌
 */
class Lenovo implements Brand {

	@Override
	public void sale() {
		System.out.println("Lenovo.sale()");
	}
}

/**
 * Dell品牌
 */
class Dell implements Brand {

	@Override
	public void sale() {
		System.out.println("Dell.sale()");
	}
}

创建电脑类型

/**
 * 电脑类型(新增类型的话继承此类即可,电脑品牌无需改动)
 */
public class Computer {
	protected Brand brand;

	public Computer(Brand brand) {
		super();
		this.brand = brand;
	}

	public void sale() {
		brand.sale();
	}
}

/**
 * 台式
 */
class Desktop extends Computer {

	public Desktop(Brand brand) {
		super(brand);
	}

	@Override
	public void sale() {
		super.sale();
		System.out.println("Desktop.sale()");
	}

}

/**
 * 笔记本
 */
class Laptop extends Computer {

	public Laptop(Brand brand) {
		super(brand);
	}

	@Override
	public void sale() {
		super.sale();
		System.out.println("Laptop.sale()");
	}
}

测试

public class Client {
	public static void main(String[] args) {
		// 销售Lenovo笔记本
		Computer lenovo = new Laptop(new Lenovo());
		lenovo.sale();
	}
}

控制台打印

Lenovo.sale()
Laptop.sale()

  • 桥接模式总结:
    • 桥接模式可以取代多层继承的方案。多层继承违背了单一职责原则,复用性较差,类的个数也非常多。桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。
    • 桥接模式极大的提高了系统的可扩展性,在两个变化维度中任意一个维度,都不需要修改原有的系统,符合开闭原则。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值