设计模式——桥梁模式

桥梁模式

定义

桥梁模式(Bridge Pattern)也叫做桥接模式。

将抽象和显示解耦,使得两者可以独立地变化。

优缺点、应用场景

优点

  1. 抽象和实现的解耦。
    这是桥梁模式的主要特点,它完全是为了解决继承的缺点而提出的设计模式。
  2. 优秀的拓展能力
    在例子中,如果山寨公司要生产新产品,只需要新建一个产品类,然后通过有参构造传给公司类即可。
  3. 屏蔽实现细节
    高层模型无需关心细节的实现。

应用场景

  1. 不希望使用继承的场景
  2. 接口或抽象类不稳定的场景。
  3. 重用性要求较高的场景。

代码模拟场景

公司都会先生产产品再做销售,有些公司会生产热门山寨产品,赚一波风口钱后就转向生产另一种商品。

非桥梁模式

小结

  1. 在公司抽象中,生产和销售都单独作为一个方法,即一个类只能实现一种商品的生产与销售。
  2. 当公司业务线变化后,需要修改公司类自身的代码逻辑,不利于拓展。

UML图

在这里插入图片描述

公司抽象和实现

/**
 * 公司 抽象
 */
public abstract class Corp {
	/**
	 * 生产产品
	 */
	protected abstract void produce();

	/**
	 * 销售产品
	 */
	protected abstract void sell();

	/**
	 * 核心工作——赚钱
	 */
	public void makeMoney() {
		// 先生产,后销售
		this.produce();
		this.sell();
	}
}

/**
 * 房产公司
 */
public class RealtyCorp extends Corp {
	static {
		System.out.println("=====房地产公司是这样运行的=====");
	}

	@Override
	protected void produce() {
		System.out.println("房地产公司盖房子...");
	}

	@Override
	protected void sell() {
		System.out.println("房地产公司买房子");
	}

	@Override
	public void makeMoney() {
		super.makeMoney();
		System.out.println("房地产公司赚大钱");
	}
}

/**
 * 服装公司
 */
public class ClothesCorp extends Corp {
	static {
		System.out.println("=====服装公司是这样运行的=====");
	}

	@Override
	protected void produce() {
		System.out.println("服装公司盖房子...");
	}

	@Override
	protected void sell() {
		System.out.println("服装公司买房子");
	}

	@Override
	public void makeMoney() {
		super.makeMoney();
		System.out.println("服装公司赚小钱");
	}
}

/**
 * IPod山寨公司
 */
public class IPodCorp extends Corp {
	static {
		System.out.println("=====山寨公公司是这样运行的=====");
	}

	@Override
	protected void produce() {
		System.out.println("我生产IPod...");
	}

	@Override
	protected void sell() {
		System.out.println("我销售IPod嘿嘿嘿...");
	}

	@Override
	public void makeMoney() {
		super.makeMoney();
		System.out.println("山寨也能赚...");
	}
}

入口类方法

private static void notBridgePattern() {
	// 房地产公司赚钱
	RealtyCorp realtyCorp = new RealtyCorp();
	realtyCorp.makeMoney();
	System.out.println();
	// 服装公司赚钱
	ClothesCorp clothesCorp = new ClothesCorp();
	clothesCorp.makeMoney();
	System.out.println();
	// 山寨公司赚钱
	IPodCorp iPodCorp = new IPodCorp();
	iPodCorp.makeMoney();
}

结果

在这里插入图片描述

桥梁模式

小结

  1. 桥梁模式中,引入产品作为桥梁,公司只需要专注于通过哪种产品赚钱
  2. 当公司经营的产品发生变化时,只需要修改、添加新的产品类即可

UML图

在这里插入图片描述

产品抽象和实现

/**
 * 产品 抽象
 */
public abstract class Product {
	/**
	 * 产品被生产出
	 */
	public abstract void beProduced();

	/**
	 * 产品被销售
	 */
	public abstract void beSell();
}

/**
 * 房子产品
 */
public class House extends Product {
	@Override
	public void beProduced() {
		System.out.println("生产房子咯....");
	}

	@Override
	public void beSell() {
		System.out.println("销售房子咯....");
	}
}

/**
 * IPod产品
 */
public class IPod extends Product {
	@Override
	public void beProduced() {
		System.out.println("生产出山寨IPod...");
	}

	@Override
	public void beSell() {
		System.out.println("销售山寨IPod...");
	}
}

公司抽象和实现

/**
 * 公司 抽象
 */
public abstract class Corp {
	/**
	 * 公司要有自己的产品
	 */
	private Product product;

	public Corp(Product product) {
		this.product = product;
	}

	/**
	 * 核心工作——赚钱
	 */
	public void makeMoney() {
		// 先生产,后销售
		this.product.beProduced();
		this.product.beSell();
	}
}

/**
 * 房产公司
 */
public class RealtyCorp extends Corp {
	static {
		System.out.println("=====房地产公司是这样运行的=====");
	}

	public RealtyCorp(Product product) {
		super(product);
	}

	@Override
	public void makeMoney() {
		super.makeMoney();
		System.out.println("房地产公司赚大钱");
	}
}

/**
 * IPod山寨公司
 */
public class IPodCorp extends Corp {
	static {
		System.out.println("=====山寨公公司是这样运行的=====");
	}

	public IPodCorp(Product product) {
		super(product);
	}

	@Override
	public void makeMoney() {
		super.makeMoney();
		System.out.println("山寨也能赚...");
	}
}

入口类方法

private static void bridgePattern() {
	// 房地产公司赚钱
	RealtyCorp realtyCorp = new RealtyCorp(new House());
	realtyCorp.makeMoney();
	// 山寨公司赚钱
	IPodCorp iPodCorp = new IPodCorp(new IPod());
	iPodCorp.makeMoney();
}

结果

在这里插入图片描述

参考书籍

秦小波《设计模式之禅》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加把劲骑士RideOn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值