设计模式—桥接模式

设计模式—桥接模式


桥接模式是一种结构型设计模式, 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。

层次结构中的第一层(通常称为抽象部分)将包含对第二层(实现部分的引用)。抽象部分能将一些对自己的的调用委派给实现部分对象,所有的实现部分都有一个通用接口,因此他们能在抽象部分内部相互替换

桥接模式在处理跨平台应用、 支持多种类型的数据库服务器或与多个特定种类 (例如云平台和社交网络等) 的 API 供应商协作时会特别有用。

1.为什么会有桥接模式

问题

​ 假如我有一个电脑类型类,从他扩展出两个子类:Notebook(笔记本)和Desktop(台式机)。我现在希望对这些类层次结构进行扩展其品牌,我打算创建名为Apple(苹果)和HUAWEI(华为)。但是我已经有了两个子类,所以总共需要创建四个类才能覆盖所有组合。例如:苹果笔记本,苹果台式机,华为笔记本,华为台式机。

这样的话在层次结构中新增一个品牌就会导致代码复杂程度指数增长。例如添加一个Lenovo(联想)的品牌,我就需要增加笔记本和台式机两个子类,这样情况会越来越糟糕。

解决方案

​ 问题的根本原因试图在两个独立的维度品牌和类型上拓展品牌类。桥接模式通过将继承改为组合的方式来解决这个问题。具体讲就是抽取其中一个维度使之成为一个独立的类层次,这样就可以在初始类引用这个新层次的对象,从而使得一个类不必具备所有的状态和行为。

2.代码实现

  • 电脑品牌接口

    public interface Brand {
      	//品牌名称
        void info();
    }
    
  • 电脑品牌实现类

    public class Apple implements Brand {
        @Override
        public void info() {
            System.out.print("Apple");
        }
    }
    
    public class HuaWei implements Brand{
        @Override
        public void info() {
            System.out.print("HuaWei");
        }
    }
    
  • 抽象的电脑类型

public abstract class Computer {

    //组合
    protected Brand brand;

    public Computer(Brand brand){
        this.brand=brand;
    }

    public void info(){
        //自带品牌
        brand.info();
    }
}
//台式机
class Desktop extends Computer{

    public Desktop(Brand brand) {
        super(brand);
    }
    @Override
    public void info() {
        super.info();
        System.out.println("台式机");
    }
}
//笔记本
class Notebook extends Computer{

    public Notebook(Brand brand) {
        super(brand);
    }
    @Override
    public void info() {
        super.info();
        System.out.println("笔记本");
    }
}
  • 测试

    public static void main(String[] args) {
            //HuaWei台式机
            Computer computer=new Desktop(new HuaWei());
            computer.info();
            //Apple笔记本
            Computer computer1=new Notebook(new Apple());
            computer1.info();
        }
    

    现在我想增加一个品牌只需要写一个继承Brand接口的类就可以实现拥有这个品牌的笔记本和台式机

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值