接触安卓也蛮久了,到现在面试被问到设计模式。。也是颇有答不上来的感觉,总有一种。。这个我知道,然而我并说不出来,我用了。。但是我不知道他叫什么。。从今天开始,整理一系列的设计模式。
我们的目的是写作分享,读作面试,跟我一起念分(mian)享(shi)
好了,不废话
一句话概括,将抽象与实现分离,使他们都可以独立的变化。。
网上拷贝的UML图,看不懂没事。。
我们来举例。。面试的时候就讲这个。。咖啡。
先建立一个咖啡的类,咖啡有各种品种,反正就乌漆麻黑一片,谁知道啊。。
再建立一个咖啡的填充物类,你喜欢加盐辣椒都可以啊。反正总结一下,我是加东西。。
代码简单写写,如下。。
public abstract class CoffeeAdditives {
public abstract String something();//咖啡添加物,客人要什么,我们给什么,现在自然不能确定了
}
public abstract class Coffee {
protected CoffeeAdditives addtives;//咖啡的添加物
protected Coffee(CoffeeAdditives addtives){
this.addtives =addtives;//你买咖啡,肯定要选个添加物嘛
}
public abstract void makeCoffee();//咖啡需要被制作,但是怎么制作,得看具体情况
}
你可以看到,一种不知道品种的咖啡,他有一种添加物。。这2者建立了桥接的关系(咖啡里有添加物,不管你子类怎么实现,管你是什么咖啡,你里面必然有添加物),这就是桥接设计模式了。。
那么你现在想喝一杯甜的中国咖啡。。该怎么做。。
建立实现类,中国咖啡,他继承了咖啡。
public class ChinaCoffee extends Coffee {
protected ChinaCoffee(CoffeeAdditives addtives) {
super(addtives);
}
@Override
public void makeCoffee() {
System.out.println("中国的"+addtives+"咖啡");//中国的咖啡,并不知道自己往里面加了什么。
}
}
然后甜的,那来个糖类,他继承了添加物。
public class Sugar extends CoffeeAdditives {
@Override
public String something() {
return "甜的";
}
}
这添加物有点悲剧,他也不知道自己到底会被谁添加。
我们再建立一个客户,你去点咖啡了。。首先,你点了一杯咖啡,然后,是甜的。。
public class Customer {
//进店铺,展柜的,我要点咖啡,中国,甜的
//于是老板给准备了糖跟中国咖啡
//于是展柜的从菜单里找到了中国甜咖啡
public void chinaAndSuger(){
Sugar sugar=new Sugar();//糖,属于添加物
ChinaCoffee chinaCoffee=new ChinaCoffee(sugar);//把糖加到中国咖啡里去
chinaCoffee.makeCoffee();//制做中国甜咖啡
}
}
现在又来个客户,接下去,换你来了。。他要泰国的甜咖啡。这时候你要做什么?
对了,你只需要买些可以添加东西的泰国咖啡就可以了,因为添加的糖你已经有了。
public class ThailandCoffee extends Coffee {
protected ThailandCoffee(CoffeeAdditives addtives) {
super(addtives);
}
@Override
public void makeCoffee() {
System.out.println("泰国的"+addtives+"咖啡");//买来泰国咖啡,不管添加物是什么
}
}
你会发现,糖里面的代码,你一点都不需要动,他也已经加入了泰国咖啡里,为啥,因为他是添加物啊。这就是桥接模式了。
你可以试着把泰国苦咖啡制作出来。。
然后,你可以试试做中国甜咖啡。。
然后换下笨蛋方法。。
你写一个类,叫中国甜咖啡类。然后老板需求改了,要你换泰国苦咖啡。好吧,重写一个泰国苦咖啡。然后老板需求又改了,泰国甜咖啡,你发现,买中国咖啡的时候,买过了啊,操。复制粘贴去,于是,多了 一个泰国甜咖啡类。然后,你发现,你重复了一份泰国的代码,跟你跟糖的代码。。
是不是很low是不是很low 。。
这就是解耦哈。。以后复制的时候,想一下,是不是哪里写的不好了。。
或许,你说,这文章,这B简单,老子天天这么用。。那好,我问一句,你知道他叫桥接模式嘛?
这时候,你又问了,知道桥接能干嘛?这还用问么?装逼啊 。装一个大大的B。
第一篇lowB菜鸟博客就到这里了。下一篇来个听起来更牛逼的。
——–解释器模式。。
别一碰到面试就特么单例,工厂,懒汉,恶汉。俗不可耐有木有啊有木有。面试官问起来,就讲高大上名字,就讲例子,怎么滴吧。舔我啊。