设计模式之桥接模式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本人对设计模式的学习,仅供参考!


一、桥接模式Bridge

1.定义

在这里插入图片描述
桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化,从而极大地提供了系统的灵活性。抽象部分和实现部分独立出来,分别定义接口,这有助于对系统进行分层,从而产生更好的结构化的系统。

1.使用场景

1.实现系统可能有多个角度分类,每一种角度都可能变化。
2.对于不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式非常适用。
3.一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

二、代码示例

1.问题引入

对于礼物,我们可以具体把他分为两种维度,比如:令人感到温暖的礼物WarmGift、令人感到冷酷的礼物ClodGift。而礼物的具体:花、书籍、香水等。如果使用继承则会是m*n的结果,导致类爆炸的现象。此时使用桥接模式非常合适。

2.代码示例

Gift的抽象化:

//Gift的抽象类
public abstract class Gift {
     //Gift的抽象聚合一个Gift的实现化
     GiftImpl impl;
     public abstract void sendGift();
}

Gift的实现化

//Gift的实现化
public abstract class GiftImpl {
    public abstract void desc();
}

Gift的抽象化的变化维度:

public class WarmGift extends Gift {
   private GiftImpl impl;
   public WarmGift(GiftImpl gift){
       this.impl=gift;
   }
    @Override
    public void sendGift() {
        System.out.print("温暖的");
        impl.desc();
    }
}
public class ColdGift extends Gift {
    private GiftImpl impl;
    public ColdGift(GiftImpl impl) {
        this.impl = impl;
    }
    @Override
    public void sendGift() {
        System.out.print("冷酷的");
        impl.desc();
    }
}

Gift的实现化的变化维度:

public class Book extends GiftImpl {
    @Override
    public void desc() {
        System.out.println("书");
    }
}
public class Flower extends GiftImpl {
    @Override
    public void desc() {
        System.out.println("花");
    }
}

测试主程序:

public class Main {
    public static void main(String[] args) {
       Gift gift= new WarmGift(new Book());
       gift.sendGift();
       Gift gift1=new ColdGift(new Flower());
       gift1.sendGift();
    }
}

结果:

温暖的书
冷酷的花

Process finished with exit code 0

总结

桥梁模式使得抽象部分和实现部分可以分别独立地扩展,而不会相互影响,从而大大提高了系统的可扩展性,但同时桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值