内容简介:先不说定义直接来看一个问题,有一个手机抽象类里面有两个抽象方法,获得手机型号和内存大小。现在我们想实例化小米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就是内存本身,通过把他俩分离开来,型号可以单独的变化,内存大小也可以单独的变化,然后再组合到一起。
总结
个人觉的桥接模式就是用组合避免继承子类爆炸问题
以上所述就是小编给大家介绍的《桥接模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
渐进增强的Web设计
[美] Todd Parker、[英] Patty Toland、[英] Scott Jehl、[法] Maggie Costello Wachs / 牛化成 / 人民邮电出版社 / 2014-1 / 69.00
本书由全球著名Web设计公司Filament集团两位创始人和两位开发主力联手打造,其中Scott Jehl还是jQuery团队成员。四位作者具有多年的网站设计和开发经验,曾为网站、无线设备、Web应用设计过众多高度实用的用户界面,受到了高度赞扬。本书展示了如何利用渐进增强方法开发网站,从而获得最佳用户体验。本书既是理解渐进增强原则和益处的实用指南,也用详细的案例分析,目的是向设计师以及开发人员传授......一起来看看 《渐进增强的Web设计》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
XML 在线格式化
在线 XML 格式化压缩工具