《桥接》 — SanjayF |
---|
小时候,梦想是当一名宇航员,驾驭飞船,太空探索。 |
长大后,梦想是当一名渔船夫,划着扁舟,荡漾湖面。 |
后来啊,梦想是当一名大土豪,开着汽车,周游列国。 |
而现在,梦想是当一名好码农,敲着代码,写完桥接。 |
图: 周庄的桥 |
好啦,改编自余光中乡愁的一篇打油诗《桥接》写好了。
不知道你有没感受到桥接的梦想,反正我是被桥接击中了。
嗯,好,写到现在第五篇,文章的格式出来了,
开头一个故事,接着是编码讲解,再来是定义,然后是后记。
那么我们进入精彩编码讲解
实现
我们来看下怎么用代码来表示这篇打油诗
我们先抽象出梦想。
public abstract class Dream {
public abstract void beSomeThing();
public abstract void doSomeThing();
}
我们的梦想很简单的样子,就是成为某东西,然后做点什么。
public class PilotDream extends Dream {
@Override
public void beSomeThing() {
System.out.print("成为宇航员");
}
@Override
public void doSomeThing() {
System.out.print("开飞船,探索太空");
}
}
public class RichDream extends Dream {
@Override
public void beSomeThing() {
System.out.print("成为土豪");
}
@Override
public void doSomeThing() {
System.out.print("开车,周游列国");
}
}
public class FishermanDream extends Dream {
@Override
public void beSomeThing() {
System.out.print("成为渔夫");
}
@Override
public void doSomeThing() {
System.out.print("划扁舟,荡漾湖面");
}
}
为了说明方便,这里就写三个梦想,不罗列太多。
接着我们来看下抽象出来的我—人类
public abstract class HumanBeing {
private Dream dream;
public HumanBeing(Dream dream) {
this.dream = dream;
}
public void ExecuteDream() {
dream.beSomeThing();
dream.doSomeThing();
}
}
作为一个地球人,我们可以有梦想,然后去追寻,实现我们的梦想的能力。
现在我们来看下小时候想成宇航员的我
public class ChildMe extends HumanBeing {
public ChildMe(PilotDream dream) {
super(dream);
}
public void ExecuteDream() {
super.ExecuteDream();
System.out.println("我在执行宇航员梦");
}
}
接着看下长大后想成渔翁的我
public class GroupUpMe extends HumanBeing {
public GroupUpMe(Fisherman dream) {
super(dream);
}
public void ExecuteDream() {
super.ExecuteDream();
System.out.println("我在执行渔翁梦");
}
}
接着是后来想当土豪的我
public class OlderMe extends HumanBeing {
public OlderMe(RichDream dream) {
super(dream);
}
public void ExecuteDream() {
super.ExecuteDream();
System.out.println("我在执行做土豪梦");
}
}
好了,我们准备好了,现在只缺我们的命运终端
了.
亮出我们的命运终端
public class LifeTerminal {
public static void main(String[] args) {
PilotDream pilotDream = new PilotDream();
ChildMe childMe = new ChildMe(pilotDream);
childMe.ExecuteDream();
GroupUpMe groupUpMe = new GroupUpMe(new FishermanDream());
groupUpMe.ExecuteDream();
OlderMe olderMe = new OlderMe(new RichDream());
olderMe.ExecuteDream();
}
}
很好,这个就是我们的打油诗《桥接》的实现啦。
我们的命运终端安排着小时候的我,长大后的我和后来的我等人生轨迹。
如果再再再后来的我有了新的梦想,那么只需要再扩展下梦想,扩展下我的人类阶段就可以啦。
我们的命运终端再次调用就可以了。
看完能感觉到桥接的魅力吗?难道你想说好像只是一堆抽象的事情而已嘛。
似乎也是啊啊啊啊。
他的最重要的魅力估计就是下面这样几行代表出来的。
public class LifeTerminal {
public static void main(String[] args) {
Me me = new Me(new FishermanDream());
me.ExecuteDream();
}
}
public class Me extends HumanBeing {
public Me(Dream dream) {
super(dream);
}
public void ExecuteDream() {
super.ExecuteDream();
System.out.println("我在追寻梦想");
}
}
我,就是我,可以去实现任何梦想,没有时间,地点,空间的限制。
我的梦想可以自由扩展,而人类也可以自由扩展,唯一需要做的就是在命运终端加多这件事。
一次OCP开闭原则的很好表现不是吗?
定义
我们来看下我们桥接
他就是因为中间一个impl的横线出名的,一桥结缘,连接两者。
左边一个业务抽象角色,右边一个业务实现角色。
命运终端在冥冥中执行了所有。