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();
    }
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页