23模式之: 桥接模式demo

本文通过对比普通实现与桥接模式的实现方式,介绍了如何解决单一职责原则被破坏的问题。通过具体的代码实例,展示了如何分离品牌与类型两个变化维度,使得系统更加灵活且易于扩展。

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

普通实现:

/**
 * 普通实现
 * 此处违反单一职责(类中有类型和品牌两处职责, 一但扩展(增加手机电脑)导致子类膨胀)
 * 桥接模式适合在拥有两个变化[扩展]的维度中使用!
 */

package bridge_mode;

/**
 * 电脑类型
 */
public interface Computer_ {
    
    /**
     * 销售
     */
    void sale();
    
}


/**
 * 台式电脑
 */
class Desktop_ implements Computer_ {
    @Override
    public void sale() {
        System.out.println("销售台式机!");
    }
}


/**
 * 笔记本电脑
 */
class Laptop_ implements Computer_ {
    @Override
    public void sale() {
        System.out.println("销售笔记本!");
    }
}


/**
 * 平板电脑
 */
class Pad_ implements Computer_ {
    @Override
    public void sale() {
        System.out.println("销售平板电脑!");
    }
}


/**
 * 联想台式电脑
 */
class LenovoDesktop_ extends Desktop_ {
    @Override
    public void sale() {
        System.out.println("销售联想台式机!");
    }
}


/**
 * 联想笔记本电脑
 */
class LenovoLaptop_ extends Desktop_ {
    @Override
    public void sale() {
        System.out.println("销售联想笔记本!");
    }
}


/**
 * 联想平板电脑
 */
class LenovoPad_ extends Pad_ {
    @Override
    public void sale() {
        System.out.println("销售联想平板电脑!");
    }
}


/**
 * 神州台式电脑
 */
class ShenZhouDesktop_ extends Desktop_ {
    @Override
    public void sale() {
        System.out.println("销售神州台式机!");
    }
}


/**
 * 神州笔记本电脑
 */
class ShenZhouLaptop_ extends Desktop_ {
    @Override
    public void sale() {
        System.out.println("销售神州笔记本!");
    }
}


/**
 * 神州平板电脑
 */
class ShenZhouPad_ extends Pad_ {
    @Override
    public void sale() {
        System.out.println("销售神州平板电脑!");
    }
}


/**
 * 戴尔台式电脑
 */
class DellDesktop_ extends Desktop_ {
    @Override
    public void sale() {
        System.out.println("销售戴尔台式机!");
    }
}


/**
 * 戴尔笔记本电脑
 */
class DellLaptop_ extends Desktop_ {
    @Override
    public void sale() {
        System.out.println("销售戴尔笔记本!");
    }
}


/**
 * 戴尔平板电脑
 */
class DellPad_ extends Pad_ {
    @Override
    public void sale() {
        System.out.println("销售戴尔平板电脑!");
    }
}

 

普通实现类图:

 

 

Demo:

品牌类型及子类:

package bridge_mode;

/**
 * 品牌类型的维度
 */
public interface Brand {
    
    /**
     * 销售
     */
    void sale();
    
}


/**
 * 联想品牌
 */
class LenovoBrand implements Brand {
    @Override
    public void sale() {
        System.out.println("销售联想...");
    }
}


/**
 * 神州品牌
 */
class ShenZhouBrand implements Brand {
    @Override
    public void sale() {
        System.out.println("销售神州...");
    }
}


/**
 * 戴尔品牌
 */
class DellBrand implements Brand {
    @Override
    public void sale() {
        System.out.println("销售戴尔...");
    }
}

 

电脑类型及子类:

package bridge_mode;

/**
 * 电脑类型的维度
 */
public class Computer {

    
    /**
     * 持有品牌(有一个品牌)
     * 使用组合, 可以替换继承
     */
    protected Brand brand;//子类要使用它, 声明protected
    
    
    /**
     * 构造器(传入品牌)
     */
    public Computer(Brand brand){
        this.brand = brand;
    }
    
    
    /**
     * 销售(品牌)
     */
    public void sale(){
        brand.sale();
    }
    
}


/**
 * 台式电脑
 */
class Desktop extends Computer {
    
    
    /**
     * 初始化父类, 使之可以调用品牌行为
     * 传入品牌算法族的某个, 也可以给父类设置set方法, 运行期动态的改变品牌
     */
    public Desktop(Brand brand) {
        super(brand);
    }
    
    
    /**
     * 具有XX品牌的销售行为, 同时具有台式机的销售行为
     */
    @Override
    public void sale(){
        super.sale();
        System.out.println("销售台式机!");
    }
    
}


/**
 * 笔记本电脑
 */
class Laptop extends Computer {
    
    public Laptop(Brand brand) {
        super(brand);
    }
    
    @Override
    public void sale(){
        super.sale();
        System.out.println("销售笔记本!");
    }
    
}


/**
 * 平板电脑
 */
class Pad extends Computer {
    
    public Pad(Brand brand) {
        super(brand);
    }
    
    @Override
    public void sale(){
        super.sale();
        System.out.println("销售平板电脑!");
    }
    
}

 

类图:

 

测试类:

package bridge_mode;

public class Client {

    public static void main(String[] args) {
        //销售联想笔记本电脑
        Computer c = new  Laptop(new LenovoBrand());
        c.sale();
        
        //销售神州台式机
        Computer c2 = new  Desktop(new ShenZhouBrand());
        c2.sale();
    }
    
}

 

执行结果:

销售联想...
销售笔记本!
销售神州...
销售台式机!

 

 

谢谢声明出处!

转自: http://www.cnblogs.com/gscq073240/articles/7117162.html

 

转载于:https://www.cnblogs.com/gscq073240/articles/7117162.html

内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由三个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核和精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围和快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、三相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项和误差源分析,旨在帮助工程师更好地理解和应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师和技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于三相电力系统监控,优化建立时间和转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收和泄漏电流等因素对测量准确性的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值