设计模式:19、桥接模式

目录

0、定义

1、桥接模式的四种角色

2、桥接模式的UML类图

3、示例代码


0、定义

将抽象部门与实现部分分离,使它们都可以独立地变化。

1、桥接模式的四种角色

  • 抽象(Abstraction):一个抽象类,包含实现者(Implementor)声明的变量。
  • 实现者(Implementor):实现者 角色是一个接口(抽象类),该接口(抽象类)中的方法不一定与Abstraction 类中的方法一致。Implementor 接口(抽象类)负责定义基本操作,而Abstraction类负责定义基于这些操作的较高层次的操作。
  • 细化抽象(Refined Abstraction):细化抽象抽象 角色的一个子类,该子类在重写(覆盖)抽象 角色中的方法时,在给出一些必要的操作后,将委托Implementor类型对象调用相应的方法。
  • 具体实现者(Concrete Implementor):具体实现者 是实现(拓展)Implementor接口(抽象类)的类

2、桥接模式的UML类图

3、示例代码

实现者(对修改关闭)

java 复制代码
package xyz.jangle.design.bridge;

public interface Implementor {
	
	public void operationImp();

}

抽象(对修改关闭)

java 复制代码
package xyz.jangle.design.bridge;

public abstract class Abstraction {
	
	Implementor impl;
	
	public Abstraction(Implementor impl) {
		super();
		this.impl = impl;
	}

	public abstract void operation();

}

细化抽象(对拓展开放,可以实现多个细化抽象)

java 复制代码
package xyz.jangle.design.bridge;

public class RefinedAbstraction extends Abstraction {

	public RefinedAbstraction(Implementor impl) {
		super(impl);
	}

	@Override
	public void operation() {
		impl.operationImp();	//重要实现部分由Implementor的子类的operationImp()方法负责。
	}

}

具体实现者1(对拓展开放,可以新增具体实现者。)

java 复制代码
package xyz.jangle.design.bridge;

public class ConcreteImplementor1 implements Implementor {

	@Override
	public void operationImp() {
		System.out.println("to do something 1 ");
	}

}

具体实现者2

java 复制代码
package xyz.jangle.design.bridge;

public class ConcreteImplementor2 implements Implementor {

	@Override
	public void operationImp() {
		System.out.println("to do something 2 ");
	}

}

客户端(使用)

java 复制代码
package xyz.jangle.design.bridge;

public class AppMain19 {

	public static void main(String[] args) {
		
		ConcreteImplementor1 implementor1 = new ConcreteImplementor1();
		RefinedAbstraction refined = new RefinedAbstraction(implementor1);
		refined.operation();
		
		ConcreteImplementor2 implementor2 = new ConcreteImplementor2();
		RefinedAbstraction refined2 = new RefinedAbstraction(implementor2);
		refined2.operation();

	}

}

输出结果:

bash 复制代码
to do something 1 
to do something 2 
相关推荐
胡志辉的博客25 分钟前
多智能体协作,不是多开几个 Agent:从中介者模式看 OpenClaw 和 Hermes Agent
人工智能·设计模式·ai·agent·中介者模式·openclaw·herman
shark222222230 分钟前
能懂!基于Springboot的用户增删查改(三层设计模式)
spring boot·后端·设计模式
014-code2 小时前
日志规范:怎么写才不算写废话
java·开发语言·设计模式·日志
楼田莉子2 小时前
同步/异步日志系统:日志落地模块\日志器模块\异步日志模块
linux·服务器·c++·学习·设计模式
kyriewen119 小时前
代码写成一锅粥?这5种设计模式让你的项目“起死回生”
前端·javascript·设计模式·typescript·ecmascript·html5
kyriewen10 小时前
代码写成一锅粥?这5种设计模式让你的项目“起死回生”
前端·javascript·设计模式
两年半的个人练习生^_^10 小时前
每日一学:设计模式之原型模式
java·开发语言·设计模式·原型模式
断眉的派大星1 天前
工厂模式(Factory Pattern)完整详解
python·设计模式
Rsun045511 天前
10、Java 桥接模式从入门到实战
java·开发语言·桥接模式
AI大法师1 天前
复盘 TikTok 品牌升级:动态品牌系统应该怎么理解和落地
大数据·人工智能·设计模式