设计模式之桥接模式

来源:互联网 发布:淘宝手表正品店 编辑:程序博客网 时间:2024/06/16 11:04
模式定义:
        桥接模式使得软件系统能轻松地沿多个维度变化,而又不引入额外的复杂度。使抽象化和实现化
        解耦,两者可以独立地变化。
遵循原则:
        使用聚合关联,不使用继承关联;
        抽象和实现解耦;
适用场合:
        (1)不希望抽象和实现之间有一个固定的绑定关系;
        (2)类的抽象和实现都可以通过子类的方法加以扩充;
        (3)对一个抽象的实现部分的修改应该对客户不产生影响。
知识扩展:
        JDK中Formatter和Handler就是典型的桥接模式。

体现出该继承才继承,是不是一个谱系的?不是说有一个方法你能用你就继承!


public interface ILight {
    public void electricConnected();
    public void light();
    public void electricClosed();
}

public class CrystalLight implements ILight {

    @Override
    public void electricClosed() {
        System.out.println("水晶灯关闭了");
    }

    @Override
    public void electricConnected() {
        System.out.println("水晶灯接通了");
    }

    @Override
    public void light() {
        System.out.println("水晶灯亮了");

    }

}

public class IncandencentLight implements ILight {

    @Override
    public void electricClosed() {
        System.out.println("白炽灯关闭了");
    }

    @Override
    public void electricConnected() {
        System.out.println("白炽灯接通了");
    }

    @Override
    public void light() {
        System.out.println("白炽灯亮了");

    }

}

通过开关实现客户端与灯之间的连接

public class BaseSwitch {
    /**
     * 这是桥梁
     */
    protected ILight light;

    public BaseSwitch(ILight light) {
        this.light = light;
    }
    public final void makeLight(){
        this.light.electricConnected();
        this.light.light();
        this.light.electricClosed();
    }
}

远程控制的开关

public class RemoteControlSwitch extends BaseSwitch {

    public RemoteControlSwitch(ILight light) {
        super(light);
    }

    public final void makeRemoteLight(int color){
        this.light.electricConnected();
        this.light.light();
        String coloString = "";
        switch (color) {
        case 0:
            coloString = "红色";
            break;
        case 1:
            coloString = "白色";
            break;
        case 2:
            coloString = "暖色";
            break;
        default:
            coloString = "冷色";
            break;
        }
        System.out.println("现在是"+coloString);
        this.light.electricClosed();
    }
}

测试

public class Client {
    public static void main(String[] args) {
        ILight incLight = new IncandencentLight();
        ILight cryLight = new CrystalLight();
        
        BaseSwitch bs = new BaseSwitch(incLight);
        bs.makeLight();
        
        RemoteControlSwitch rcs = new RemoteControlSwitch(cryLight);
        rcs.makeRemoteLight(1);
    }

}

0 0
原创粉丝点击