桥接模式

news/2025/2/28 12:08:01/

模式定义

桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
当一个对象由多个对象组合而成,使用桥接模式能减少类数量。

UML类图

1236909-20180126184458772-1425790677.png

  • 抽象类(Abstraction) 定义一个成员变量(实现类接口类型) 和赋值方法
  • 扩展抽象类(Refined Abstraction) 实现了在抽象类中定义的抽象业务方法,在扩充抽象类中可以调用 在实现类接口中定义的业务方法
  • 实现类接口(Implementor) 实现部分的基本操作接口
  • 具体实现类(Concrete Implement) 实现了实现类接口

    代码结果

public static class BridgeApp{public static void Run(){Abstraction ab = new RefinedAbstraction();ab.Implementor = new ConcreteImplementorA();ab.Operation();}}public class Abstraction{protected Implementor implementor;public Implementor Implementor{set { implementor = value; }}public virtual void Operation(){implementor.Operation();}}public interface Implementor{void Operation();}public class RefinedAbstraction : Abstraction{public override void Operation(){implementor.Operation();}}public class ConcreteImplementorA : Implementor{public void Operation(){Console.WriteLine("ConcreteImplementorA Operation");}}public class ConcreteImplementorB : Implementor{public void Operation(){Console.WriteLine("ConcreteImplementorB Operation");}}

情景模式

现在智能手机品牌越来越多了,其实大家都明白好的手机都是那不同的部件组装下。这里假设手机主要CPU和内存。哈哈只需要修改CPU与内存就可以生产不同类型的手机

public static class BridgeApp{public static void Run(){PhoneOne phone1 = new PhoneOne();phone1.Display();PhoneTwo phone2 = new PhoneTwo();phone2.Display();}}public class PhoneOne{private CPU _cpu = new HPCPU();private RAM _ram = new RAM128();public void Display(){Console.WriteLine("Phone one:");_cpu.Display();_ram.Display();Console.WriteLine("------------------------------------------");}}public class PhoneTwo{private CPU _cpu = new HPCPU();private RAM _ram = new RAM64();public void Display(){Console.WriteLine("Phone two:");_cpu.Display();_ram.Display();Console.WriteLine("------------------------------------------");}}public abstract class CPU{public abstract void Display();}public abstract class RAM{public abstract void Display();}public class RAM64 : RAM{public override void Display(){Console.WriteLine("RMS size is 64");}}public class RAM128 : RAM{public override void Display(){Console.WriteLine("RMS size is 128");}}public class LestinaCPU : CPU{public override void Display(){Console.WriteLine("CPU Type is LestinaCPU");}}public class HPCPU : CPU{public override void Display(){Console.WriteLine("CPU Type is HPCPU");}}

转载于:https://www.cnblogs.com/LoveTomato/p/8360989.html


http://www.ppmy.cn/news/230335.html

相关文章

常用12种设计模式---(其二)抽象工厂(abstract factory)

1.抽象工厂设计模式 1.1 什么是抽象工厂? 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式属于创建模式之一,创建模式主要是对类的实例化进行了抽象 1.2 解决问题的思路是什么? 1.2.1&#xf…

抽象类、接口与枚举

抽象类 abstract class 场景 public abstract class MockBusiness {public void fun1(){public abstract void fun2();// 依赖于第三方实现public void fun3(){} }1.抽象类的使用场景: 在业务实现中,有一个或多个功能需要依赖于第三方实现,…

C++ 核心篇 9 之类与对象 - 多态

C 自学 多态的基本语法多态案例1 - 计算器类纯虚函数和抽象类多态案例2 - 学科学习过程虚析构和纯虚析构多态案例3 - 电脑组装 多态的基本语法 多态分为二类:静态多态和动态多态 》》》静态多态:函数重载和运算符重载属于静态多态 》》》动态多态&…

activiti添加业务key 到Activiti的表

/*** 添加业务key 到Activiti的表*/Testpublic void addBusinessKey(){ // 1、获取流程引擎ProcessEngine processEngine ProcessEngines.getDefaultProcessEngine(); // 2、获取RuntimeServiceRuntimeService runtimeService processEngine.getRuntimeService…

(Day1)配置云开发提供的模板

创建云开发项目 打开微信开发者工具;点击“项目”->“新建项目”;输入项目名称和选择项目所要保存的目录;输入自己的AppID; AppID的获取,需要登陆微信公众平台,并点击“开发管理”->"开发设置…

使用可上网的服务器作为网关,实现另一台服务器上网

文章目录 物理条件方法一:不使用交换机方法二:使用交换机 配置步骤查看网络状态设置静态IP将服务器A设置成网关重新启动各服务器网卡设置主机名 参考资料 本文的目标是利用一台可以上网的服务器作为网关,使在同一局域网中的所有服务器都可以上…

SpringBoot项目使用自带的@Async异步处理功能实现业务逻辑的异步调用

SpringBoot项目使用自带的Async异步处理功能实现业务逻辑的异步调用 物料准备: 1.配置启用SpringBoot内置的EnableAsync功能 2.定义async任务执行需要的线程池配置 3.定义具体的async方法,可以是无返回值的void方法,也可以是有返回值的方…

数据库期末复习(9.1)故障恢复到检查点之前

故障的分类 事务故障 系统故障 存储介质故障 只能通过故障来实现. 故障恢复 缓冲池策略 STEAL和FORCE策略:具体内容见课件。 为啥要使用steal和force两种策略 原因:如果不用steal策略 缓冲区就会有大量的脏页,如果使用not force策略 由于对同一个对…