一开始的时候,我觉得设计模式不是很重要,因为在工作的过程中,处理起来大多数是业务的逻辑,好像也是只有在面试的时候有作用,正所谓“面试造火箭,进门当螺丝”。但是随着自己的不断深入的理解,阅读一些好的项目的源码的时候才发现心有余,而力不足。当自己需要设计一个系统的时候也有很多的地方没有考虑到。然后这个时候才感觉到设计模式的好处。
但是当自己认真去学的时候才发现设计模式很难让人理解如果项目经验不是很足的情况下,就算是凭着一时的兴趣,强行的去学的话,尽管确实是可以死记住一些简单的设计模式,但是对于使用的场景的话又会用不上,感觉又没有真正的理解,于是,我自己在想,能不能找到一种比较好玩又好记的方式来让自己可以理解好设计模式,因为有23种之多。功夫不负有心人,似乎自己找到了适合自己学习的方式,于是就总结起来,分享给大家,希望大家也可以从中找到适合自己的方式。
闲话不多说,提笔开讲。因为要好玩,我第一时间就想到了西游记,感觉有很多种模式都可以结合起来说。
对于一些理论上的知识,我就不多说,详细的可以百度了解下。
首先,学习东西的时候,我们必须清楚明白它的意图或者说作用,正如唐三藏去西天取经。他的目的就是去取经的,但是凭借他自己的力量去取经的话,感觉不太可行,于是他需要帮手,这个时候就该我们熟悉的悟空、八戒、沙僧、以及白龙马出场了。然后我们通过图的方式细划分下:
通过上图,我们可以清楚的知道,为了给唐僧成功的取经,悟空这些才会上产出来,所以我们可以这样理解,工厂就是用来创建对象的,也就是说这两种设计模式都属于创建型的设计模式。
假如现在你就是唐三藏,但是不好意思的是现实中没有众多仙家,所以为了找到帮手我们就需要自己创建一些帮手,所以自己动手,丰衣足食。下面我就通过代码来实现产出帮手的工厂:
(1)第一步,定义一个帮手接口:
/**
* 帮手的接口
* */
public interface Bangshou {
/**
* 用来说明是谁
* */
void whoAmI();
}
(2)第二步,定义好悟空、八戒这些帮手
public class WuKong implements Bangshou{
@Override
public void whoAmI() {
System.out.println("我是齐天大圣孙悟空!");
}
}
public class Bajie implements Bangshou{
@Override
public void whoAmI() {
System.out.println("我是天蓬元帅猪八戒!");
}
}
(3)第三步,实现我们的工厂
public class BangshouFactory {
/**
* 这里就生产工厂的方法,如果不喜欢使用if,也可以采用switch
* 或者采用map等等,过程实现有很多,可以自己扩展,who的null判断记得
* */
public static Bangshou productBangshou(String who) {
if("WUKONG".equalsIgnoreCase(who)) {
return new WuKong();
}
if("BAJIE".equalsIgnoreCase(who)) {
return new Bajie();
}
if("BAILONGMA".equalsIgnoreCase(who)) {
return new Bailongma();
}
if("SHASENG".equalsIgnoreCase(who)) {
return new Shaseng();
}
return null;
}
}
(4)第四步,测试是否达到了我们的效果
public class Test {
public static void main(String[] args) {
Bangshou b = BangshouFactory.productBangshou("WUKONG");
b.whoAmI();
Bangshou c = BangshouFactory.productBangshou("bajie");
c.whoAmI();
}
}
(5)效果图如下:
这个过程就是工厂模式的实现了,是不是好理解了点?唐三藏就凭借着它自己设计的工厂,找到满意的帮手之后就出发了,但是取经哪有那么容易,很多的时候凭借他们根本就对付不了的一些个别的妖怪,还得找第三方帮手啊!!!
于是唐三藏又在想,怎么办呢?这个工厂貌似弱了些,突然间抽象工厂模式在他的脑海里出现,那么抽象工厂又怎么实现呢?
不要错过,感兴趣的话,欢迎查看下节,下节更精彩!