简介
将抽象部分与它的具体实现部分分离,使他们都可以独立变化,通过组合的方式建立两个类之间联系,而不是继承,属于结构型。
适用场景
1、抽象和具体实现之间增加更多的灵活性
2、一个类存在多个独立变化的维度,且这两个维度都需要独立进行扩展
3、不希望使用继承,或因为多层继承导致系统类的个数剧增
优点
1、分离抽象部分及其具体实现部分
2、提高了系统的可扩展性
3、符合开闭原则
缺点
1、增加了系统的理解与设计难度
2、需要正确的识别出系统中两个独立变化的维度
代码示例
背景说明:会员有普通会员和黄金会员,平台有pc端和app端,不同平台可以创建不同的会员。
会员接口
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中应用
本文为博主原创文章,未经博主允许不得转载。
更多内容请访问:IT源点
注意:本文归作者所有,未经作者允许,不得转载