【设计模式】桥接模式

  |   0 评论   |   46 浏览

简介

将抽象部分与它的具体实现部分分离,使他们都可以独立变化,通过组合的方式建立两个类之间联系,而不是继承,属于结构型。

适用场景

1、抽象和具体实现之间增加更多的灵活性
2、一个类存在多个独立变化的维度,且这两个维度都需要独立进行扩展
3、不希望使用继承,或因为多层继承导致系统类的个数剧增

优点

1、分离抽象部分及其具体实现部分
2、提高了系统的可扩展性
3、符合开闭原则

缺点

1、增加了系统的理解与设计难度
2、需要正确的识别出系统中两个独立变化的维度

代码示例

背景说明:会员有普通会员和黄金会员,平台有pc端和app端,不同平台可以创建不同的会员。
image.png
会员接口

public interface Vip {
    Vip buyVip();
    void showVipType();
}

普通vip类

public class CommonVip implements Vip {
    public Vip buyVip() {
        System.out.println("购买普通会员");
        return new CommonVip();
    }
    public void showVipType() {
        System.out.println("这是普通会员");
    }
}

黄金会员类

public class GoldVip implements Vip {
    public Vip buyVip() {
        System.out.println("购买黄金会员");
        return new GoldVip();
    }
    public void showVipType() {
        System.out.println("这是黄金会员");
    }
}

平台抽象类

public abstract class Platform {
    protected Vip vip;
    public Platform(Vip vip) {
        this.vip = vip;
    }
    abstract Vip buyVip();
}

pc实现类

public class PcPlatform extends Platform {
    @Override
    Vip buyVip() {
        return vip.buyVip();
    }
    public PcPlatform(Vip vip) {
        super(vip);
    }
}

app实现类

public class AppPlatform extends Platform {
    public AppPlatform(Vip vip) {
        super(vip);
    }
    @Override
    Vip buyVip() {
        return vip.buyVip();
    }
}

测试类

public class BridgeTest {
    public static void main(String[] args) {
        Platform pcPlatform = new PcPlatform(new CommonVip());
        Vip commonVip = pcPlatform.buyVip();
        commonVip.showVipType();

        Platform appPlatform = new AppPlatform(new GoldVip());
        Vip goldVip = appPlatform.buyVip();
        goldVip.showVipType();
    }
}

输出结果

购买普通会员
这是普通会员
购买黄金会员
这是黄金会员

上面示例源码

源码分析

jdbc中应用

image.png

也可以关注我的公众号:程序之声
图片
关注公众号,领取更多资源

本文为博主原创文章,未经博主允许不得转载。

评论

发表评论