23模式之: 桥接模式demo

普通实现:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值