一次违反常规的Java大厂面试经历,【源码分析设计模式 12

不要一涉及继承就考虑该模式,尽可能把变化的因素封装到最细、最小的逻辑单元中,避免风险扩散。

当发现类的继承有n层时,可以考虑使用该模式。

五、代码实现


1、品牌


package designMode.advance.bridge;



public interface Brand {

    void open();

    void close();

    void call();

} 

2、具体品牌


package designMode.advance.bridge;



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 designMode.advance.bridge;

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(" 小米手机打电话 ");

}

}




### 3、手机样式,行为类



package designMode.advance.bridge;

public abstract class Phone {

//组合品牌

private Brand brand;



//构造器

public Phone(Brand brand) {

    super();

    this.brand = brand;

}



protected void open() {

    this.brand.open();

}

protected void close() {

    brand.close();

}

protected void call() {

    brand.call();

}

}


package designMode.advance.bridge;



public class UpRightPhone extends Phone {

    //构造器

    public UpRightPhone(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 designMode.advance.bridge;

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(" 折叠样式手机 ");

}

}




### 4、测试类



package designMode.advance.bridge;

public class Client {

public static void main(String[] args) {

    //获取折叠式手机 (样式 + 品牌 )

    Phone phone1 = new FoldedPhone(new XiaoMi());

    phone1.open();

    phone1.call();

    phone1.close();



    System.out.println("=======================");



    Phone phone2 = new FoldedPhone(new Vivo());



    phone2.open();

    phone2.call();

    phone2.close();



    System.out.println("==============");



    UpRightPhone phone3 = new UpRightPhone(new XiaoMi());



    phone3.open();

    phone3.call();

    phone3.close();



    System.out.println("==============");



    UpRightPhone phone4 = new UpRightPhone(new Vivo());



    phone4.open();

    phone4.call();

    phone4.close();

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值