桥接模式-手机问题

2021-01-17  本文已影响0人  Shaw_Young

1.手机操作问题

现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网、打电话等),如图:


2.传统方案解决收集操作问题

传统方法对应的类图


3.桥接模式解决收集操作问题

使用桥接模式改进传统方式,让程序具有更好的扩展性,利用程序维护


package com.young.bridge;

/**
 * @author Shaw_Young
 * @date 2020/10/12 22:04
 */
public interface Brand {

    void open();

    void close();

    void call();

}
package com.young.bridge;

/**
 * @author Shaw_Young
 * @date 2020/10/12 22:04
 */
public class XiaoMi implements Brand {
    @Override
    public void open() {
        System.out.println("小米手机开机");
    }

    @Override
    public void close() {
        System.out.println("小米手机关机");
    }

    @Override
    public void call() {
        System.out.println("小米手机打电话");
    }
}
package com.young.bridge;

/**
 * @author Shaw_Young
 * @date 2020/10/12 22:05
 */
public class Vivo implements Brand {
    @Override
    public void open() {
        System.out.println("Vivo手机开机");
    }

    @Override
    public void close() {
        System.out.println("Vivo手机关机");
    }

    @Override
    public void call() {
        System.out.println("Vivo手机打电话");
    }
}
package com.young.bridge;

/**
 * @author Shaw_Young
 * @date 2020/10/12 22:06
 */
public abstract class Phone {

    /**
     * 组合品牌
     */
    private Brand brand;

    /**
     * 构造器
     */
    public Phone(Brand brand) {
        this.brand = brand;
    }

    protected void open() {
        brand.open();
    }

    protected void close() {
        brand.close();
    }

    protected void call() {
        brand.call();
    }
}
package com.young.bridge;

/**
 * @author Shaw_Young
 * @date 2020/10/12 22:09
 */
public class FoldedPhone extends Phone {
    /**
     * 构造器
     */
    public FoldedPhone(Brand brand) {
        super(brand);
    }

    public void open() {
        super.open();
        System.out.println("折叠样式手机");
    }

    public void close() {
        super.close();
        System.out.println("折叠样式手机");
    }

    public void call() {
        super.call();
        System.out.println("折叠样式手机");
    }

}
package com.young.bridge;

/**
 * @author Shaw_Young
 * @date 2020/10/12 22:14
 */
public class Client {

    public static void main(String[] args) {
        Brand xiaoMi = new XiaoMi();
        Phone phone = new FoldedPhone(xiaoMi);
        phone.open();
        phone.call();
        phone.close();
    }

}
上一篇 下一篇

猜你喜欢

热点阅读