设计模式之桥接模式

本文介绍了桥接模式的概念及其在软件设计中的应用。桥接模式能够有效地分离抽象与实现,使得两者能够独立变化,从而简化系统的扩展与维护。文章通过一个具体的例子——不同类型的灯具与开关的组合使用,展示了桥接模式的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模式定义:
        桥接模式使得软件系统能轻松地沿多个维度变化,而又不引入额外的复杂度。使抽象化和实现化
        解耦,两者可以独立地变化。
遵循原则:
        使用聚合关联,不使用继承关联;
        抽象和实现解耦;
适用场合:
        (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);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值