设计模式——(7)桥接模式

1、定义

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

2、UML类图

  • 抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。

  • 扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。

  • 实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。

  • 具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。

3、实例

a、背景

(1)、一个公司,有产品,具体有服装公司、汽车公司、食品公司等。

(2)、一个产品,具体可以包含服装、汽车、食品等。

UML类图

b、实例

步骤一:定义一个产品抽象类

public abstract class Product {
     public abstract void make();
     public abstract void sell();
}

步骤二:定义产品具体实现

内衣

public class Shirt extends Product {

     @Override
     public void make() {
           // TODO Auto-generated method stub
           System.out.println("生产内衣衬衫");
     }

     @Override
     public void sell() {
           // TODO Auto-generated method stub
           System.out.println("销售内衣衬衫");
     }
}

外套

  public class Jacket extends Product {

       @Override
       public void make() {
             // TODO Auto-generated method stub
             System.out.println("生产外套夹克");
       }

       @Override
       public void sell() {
             // TODO Auto-generated method stub
             System.out.println("销售外套夹克");
       }
  }

步骤三:定义一个公司抽象类,并维护指向产品对象的指针

public abstract class company {
     //生产服装
     private Product product;
     public company(Product product) {
           this.product = product;
     }
     
     public void makeMoney() {
           this.product.make();
           this.product.sell();
     }
}

步骤四:创建一个具体的公司,服装公司

public class ClotheCompany extends company{
     public ClotheCompany(Product product) {
           super(product);
           // TODO Auto-generated constructor stub
     }
     
     @Override
     public void makeMoney() {
           // TODO Auto-generated method stub
           super.makeMoney();
           System.out.println("服装公司盈利");
     }
}

步骤五:创建一个测试类

public class TestBridge {
     public static void main(String[] args) {
           System.out.println("外套这样挣的钱");
           ClotheCompany shirt = new ClotheCompany(new Shirt());
           shirt.makeMoney();
           
           System.out.println("内衣这样挣的钱");
           ClotheCompany Jacket = new ClotheCompany(new Jacket());
           Jacket.makeMoney();
     }
}

输出:

4、优点

  • 可以将接口与实现相分离。

  • 提高了可扩展性。

  • 对客户端隐藏了实现的细节。

5、缺点

  • 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

  • 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。

6、使用场景

  • 想避免在抽象及其实现之间存在永久的绑定。

  • 抽象及其实现可以使用子类进行扩展。

  • 抽象的实现被改动应该对客户端没有影响,不用重新编译代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DF10F-0001A

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

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

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

打赏作者

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

抵扣说明:

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

余额充值