设计模式——桥梁模式

这篇具有很好参考价值的文章主要介绍了设计模式——桥梁模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

桥梁模式

定义

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

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

优缺点、应用场景

优点

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

应用场景

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

代码模拟场景

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

非桥梁模式

小结

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

UML图

设计模式——桥梁模式,设计模式,设计模式,java,开发语言

公司抽象和实现

/**
 * 公司 抽象
 */
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();
}

结果

设计模式——桥梁模式,设计模式,设计模式,java,开发语言

桥梁模式

小结

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

UML图

设计模式——桥梁模式,设计模式,设计模式,java,开发语言

产品抽象和实现

/**
 * 产品 抽象
 */
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();
}

结果

设计模式——桥梁模式,设计模式,设计模式,java,开发语言

参考书籍

秦小波《设计模式之禅》文章来源地址https://www.toymoban.com/news/detail-594647.html

到了这里,关于设计模式——桥梁模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【单例设计模式原理详解】Java/JS/Go/Python/TS不同语言实现

    单例模式(Singleton Pattern)属于创建型设计模式,这种模式只创建一个单一的类,保证一个类只有一个实例,并提供一个访问该实例的全局节点。 当您想控制实例数目,节省系统资源,并不想混用的时候,可以使用单例模式。单例有很多种实现方式,主要分为懒汉和饿汉模式

    2023年04月27日
    浏览(92)
  • 【迭代器设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    迭代器模式(Iterator Pattern),是一种结构型设计模式。给数据对象构建一套按顺序访问集合对象元素的方式,而不需要知道数据对象的底层表示。 迭代器模式是与集合共存的,我们只要实现一个集合,就需要同时提供这个集合的迭代器,就像Java中的Collection,List、Set、Map等

    2023年04月17日
    浏览(48)
  • 【模板方法设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    模板方法模式(Template Method Pattern)也叫模板模式,是一种行为型模式。它定义了一个抽象公开类,包含基本的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构,只是重定义该算法的某些特定步骤。不同的子类以不同的方式实现这些抽象方法

    2024年02月01日
    浏览(86)
  • 【享元设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    享元模式(Flyweight Pattern),是一种结构型设计模式。主要用于减少创建对象的数量,以减少内存占用和提高性能。它摒弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,让你能在有限的内存容量中载入更多对象。 当程序需要生成数量巨大的相似

    2023年04月10日
    浏览(39)
  • 【解释器设计模式详解】C/Java/Go/JS/TS/Python不同语言实现

    解释器模式(Interpreter Pattern)是一种行为型设计模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式常被用在 SQL 解析、符号处理引擎等。 解释器模式常用于对简单语言的编译或分析实例中,为了掌握好它的结构与实现,必须先了解编译原理中的

    2023年04月12日
    浏览(232)
  • 【观察者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    观察者模式(Observer Pattern)是一种行为型模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 观察者模式使用三个类Subject、Observer和Client。Subject对象带有绑定观察者到Client对象和从Client对象解绑观察

    2023年04月21日
    浏览(81)
  • 【备忘录设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    备忘录模式(Memento Pattern)是一种结构型设计模式。这种模式就是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并放在外部存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。 备忘录模式

    2023年04月20日
    浏览(75)
  • 【访问者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    访问者模式(Visitor Pattern)是一种行为型模式。它封装一个访问者类,把各元素类的操作集合起来,目的是将数据结构与数据操作分离。在不改变原有元素类数据结构的前提下,改变了元素类的执行算法。 当某些较为稳定的东西(数据结构或算法),不想直接被改变但又想扩

    2024年02月02日
    浏览(80)
  • 【中介者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    中介者模式(Mediator Pattern)是一种行为型模式。它限制对象之间的直接交互,它用一个中介对象来封装一系列的动作,以让对象之间进行交流。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 当一些对象和其他对象紧密

    2023年04月19日
    浏览(39)
  • 【Design Pattern 23种经典设计模式源码大全】C/Java/Go/JS/Python/TS等不同语言实现

    经典设计模式源码详解,用不同语言来实现,包括Java/JS/Python/TypeScript/Go等。结合实际场景,充分注释说明,每一行代码都经过检验,确保可靠。 设计模式是一个程序员进阶高级的必然选择,不懂设计模式,就像写文章不懂得层次,盖房子没有结构。只有充分懂得设计之道,

    2023年04月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包