JAVA设计模式之桥接模式

桥接模式

传统设计问题:每次添加新的类型,都需要重新添加子类

1、扩展性问题(类爆炸)

2、违反了单一职责原则

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3NEo6pqX-1606556279754)(C:\Users\acer\AppData\Roaming\Typora\typora-user-images\image-20201128170146172.png)]

桥接模式

1、将实现与抽象放在两个不同的类层次独立起来

2、结构型设计模式

3、基于类的最小设计原则,通过封装聚合和继承等行为让不同类承担不同职责

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YioSMROd-1606556279770)(C:\Users\acer\AppData\Roaming\Typora\typora-user-images\image-20201128170447928.png)]

例子

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vqfpyVv9-1606556279781)(C:\Users\acer\AppData\Roaming\Typora\typora-user-images\image-20201128173712216.png)]

Brand

public interface Brand {
    void open();
    void close();
    void call();
}

HuaWei

public class HuaWei implements Brand {
    @Override
    public void open() {
        System.out.println("华为开机");
    }
    @Override
    public void close() {
        System.out.println("华为关机");
    }
    @Override
    public void call() {
        System.out.println("华为打电话");
    }
}

Phone

public abstract class Phone {
    //聚合手机品牌
    private Brand brand;
    public Phone(Brand brand) {
        super();
        this.brand = brand;
    }
    protected void open() {
        this.brand.open();
    }
    protected void close() {
        this.brand.close();
    }
    protected void call() {
        this.brand.call();
    }
}

FoldType

public class FoldType extends Phone {
    public FoldType(Brand brand) {
        super(brand);
    }
    @Override
    protected void open() {
        super.open();
        System.out.println("折叠样式");
    }
    @Override
    protected void close() {
        super.close();
        System.out.println("折叠样式");
    }
    @Override
    protected void call() {
        super.call();
        System.out.println("折叠样式");
    }
}

Client

public class Client {
    public static void main(String[] args) {
        //手机 = 品牌 + 样式
        Phone phone = new FoldType(new HuaWei());
        phone.open();
        phone.call();
        phone.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值