桥接模式

栏目: IT技术 · 发布时间: 4年前

内容简介:先不说定义直接来看一个问题,有一个手机抽象类里面有两个抽象方法,获得手机型号和内存大小。现在我们想实例化小米10这个型号的手机两个方法可能看起来不明显,是1x2,如果现在多出一个方法是getRom,Rom的种类有3种,128,256,512。那么需要的类就变成了1x2x3,属性越多需要的类就越多,这样维护起来就很麻烦。这时候我们就需要用组合解决这个子类爆炸的问题

桥接模式

先不说定义直接来看一个问题,有一个手机抽象类

public abstract class Phone{
    public abstract void getName();
    public abstract void getRam();
}

里面有两个抽象方法,获得手机型号和内存大小。现在我们想实例化小米10这个型号的手机

public class Mi106g extends Phone {
    @Override
    public void getName() {
        System.out.println("小米10");
    }

    @Override
    public void getRam() {
        System.out.println("6");
    }
}
public class Mi1068g extends Phone {
    @Override
    public void getName() {
        System.out.println("小米10");
    }

    @Override
    public void getRam() {
        System.out.println("8");
    }
}

两个方法可能看起来不明显,是1x2,如果现在多出一个方法是getRom,Rom的种类有3种,128,256,512。那么需要的类就变成了1x2x3,属性越多需要的类就越多,这样维护起来就很麻烦。这时候我们就需要用组合解决这个子类爆炸的问题

public abstract class Phone {
    Ram ram;
    public void setRam(Ram ram){
        this.ram = ram;
    }
    public abstract void model();
}

public abstract class Ram {
    public abstract void getRam();
}

现在Ram作为一个单独的类,和Phone组合

public class Mi10 extends Phone {
    @Override
    public void model() {
        System.out.println("Mi10");
    }
}
public class Ram6 extends  Ram {
    @Override
    public void getRam() {
        System.out.println("6g");
    }
}
public class Ram8 extends  Ram {
    @Override
    public void getRam() {
        System.out.println("8g");
    }
}

那我们要获得一个6g的Mi10怎么来弄呢

Phone Mi106g = new Mi10();
Mi106g.setRam(new Ram6());

或者是设置在构造函数里,重点在于组合。

现在来看一下桥接模式的定义

将抽象部分与它的实现部分分离,使它们都可以独立地变化。

我感觉这个确实有点抽象不太好理解,这里不是说编程语言里的抽象和实现,结合上面的例子,手机的型号可以理解为抽象,Ram理解为实现,因为手机型号是一个笼统的概念,而Ram就是内存本身,通过把他俩分离开来,型号可以单独的变化,内存大小也可以单独的变化,然后再组合到一起。

总结

个人觉的桥接模式就是用组合避免继承子类爆炸问题


以上所述就是小编给大家介绍的《桥接模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP与MySQL权威指南

PHP与MySQL权威指南

吴津津、田睿、李云、刘昊 / 机械工业出版社华章公司 / 2011-10 / 118.00元

PHPChina官方出品,Discuz!创始人戴志康、UCHome创始人李国德、ThinkPHP创始人刘晨、PHPCMS项目负责人王参加等联袂推荐。 本书是目前为止最全面的关于PHP与MySQL开发技术的书籍之一,系统而全面地讲解了PHP与MySQL技术的方方面面,适合初中级的PHP程序员系统地学习;本书也是目前为止首本系统而深入地讲解UCenter、Discuz!、UCHome、ShopN......一起来看看 《PHP与MySQL权威指南》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具