JAVA设计模式笔记(桥接模式)

有这样一个需求:不同手机有不同款式同时也有不同品牌,要编程实现手机的功能(开机、关机、打电话等)
普通的思路是创建一个phone方法,让款式类去继承Phone方法,然后再让品牌类去继承款式类
在这里插入图片描述
这种方法存在的问题是:
1、扩展性不好,增加一个手机的样式,就得增加所有品牌的类,或者增加一个品牌就得在所有样式下增加这个品牌的类。
2、违反了单一指责原则,增加一个样式就得增加所有品牌。

我们需要桥接模式去解决这些问题。

桥接模式
桥接模式是指将实现和抽象放在两个不同的类层次中,使两个层次可以独立改变。简单来说就是将两种不同的继承体系通过聚合/组合联系在一起。桥接模式是一种结构型的设计模式。

上面的案例我们可以创建品牌的接口,让品牌子类去实现;创建手机的抽象类,让样式子类去继承,最后将品牌抽象类聚合进手机抽象类中。

类图
在这里插入图片描述

品牌类及实现

public interface Brand {
    void call();
}
public class Xiaomi implements Brand {
    @Override
    public void call() {
        System.out.println("小米手机打电话");
    }
}
public class VIVO implements Brand {
    @Override
    public void call() {
        System.out.println("Vivo手机打电话");
    }
}

手机样式类及其实现

public abstract class Phone {
    private Brand brand;

    public Phone(Brand brand) {
        this.brand = brand;
    }
    public void call(){
        brand.call();
    }
}
public class FoldedPhone extends Phone {
    public FoldedPhone(Brand brand) {
        super(brand);
    }
    public void call(){
        super.call();
        System.out.println("折叠样式的手机");
    }
}
public class UprightPhone extends  Phone{
    public UprightPhone(Brand brand) {
        super(brand);
    }
    public void call(){
        super.call();
        System.out.println("立式样式的手机");
    }
}

客户端使用:

public class Client {
    public static void main(String[] args) {
        FoldedPhone phone=new FoldedPhone(new Xiaomi());
        phone.call();
    }
}

桥接模式的优点:
1)分离抽象和实现部分
  桥接模式分离了抽象部分和实现部分,从而极大地提供了系统的灵活性。让抽象部分和实现部分独立出来,分别定义接口,这有助于对系统进行分层,从而产生更好的结构化的系统。
2)更好的扩展性
  桥梁模式使得抽象部分和实现部分可以分别独立地扩展,而不会相互影响,从而大大提高了系统的可扩展性。

发布了56 篇原创文章 · 获赞 3 · 访问量 1634

猜你喜欢

转载自blog.csdn.net/qq_20786911/article/details/103441062