栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式6(桥接模式)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式6(桥接模式)

桥接模式

将抽象类和实现类进行分离,避免了类的多层继承带来的类爆炸。分离之后就可以自由组合实现类和实现类的方法这样便于扩展功能。
比如手机有很多的品牌,每个品牌都有不同类型的手机。如果如果加一个品牌那么对于多种类型也要复制一遍。这样就很不灵活。如果使用桥接模式就可以直接扩展一个品牌类,然后和抽象类进行组合即可。只需要一个类就够了。
直接看代码:
这里将手机作为抽象类也是桥接类,将品牌作为实现类。
首先定义品牌类:

public interface Brand {

    void open();

    void close();

    void call();
}


public class Xiaomi  implements  Brand {
    @Override
    public void open() {
        System.out.println("Xiaomi 手机 开机");
    }

    @Override
    public void close() {
        System.out.println("Xiaomi 手机 关机");
    }

    @Override
    public void call() {
        System.out.println("Xiaomi 手机 打电话");
    }
}



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

再定义抽象类


public abstract class Phone {

    private Brand brand;

    public Phone(Brand brand) {
        this.brand = brand;
    }

    public Brand getBrand() {
        return brand;
    }

    public void setBrand(Brand brand) {
        this.brand = brand;
    }

    protected void open() {
        this.brand.open();
    }

    protected void close() {
        this.brand.close();
    }

    protected void call() {
        this.brand.call();
    }
}



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



public class UpPhone extends Phone {
    public UpPhone(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("直立式");
    }

}

调用端:

public class Client {
    public static void main(String[] args) {
        Phone phone=new FoldedPhone(new Vivo());
        phone.open();
        phone.call();
        phone.close();

        Phone phone1=new FoldedPhone(new Xiaomi());
        phone1.open();
        phone1.call();
        phone1.close();

        Phone phone2=new UpPhone(new Xiaomi());
        phone2.open();
        phone2.call();
        phone2.close();
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/927300.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号