FACTORY设计模式【让吃货也能理解的程序】
一个人要有思想,技术再牛的人,如果没有一点点文化气氛,那么也是个码农,不能追到女朋友滴。
我这个人文化真心不多,但是比较喜欢读古诗文。虽然读完之后,记在脑海里的不多,不过,就讨一个喜欢【读】。
Leechee:荔枝,南国四大果品居首。
1、简单模式
package patterns.createable.factory; /** * "日啖荔枝三百颗,不辞长作岭南人"---摘自 宋朝苏轼·《惠州一绝》 * 古人对荔枝的赞美,频频出现在诗句中 * 的确,这南国的荔枝,的确值得品尝 * 在南国有四大果品中,荔枝居首 * * @author one * */ public class Leechee { void eat(){ System.out.println("Eat Leechee"); } }
package patterns.createable.factory; /** * 好东西,要学会分享,不要掖着。 * 所以开了个荔枝加工厂,让四海之内的兄弟姐妹都尝尝 * * @author one * */ public class LeecheeFactory { Leechee get() { return new Leechee(); } }
package patterns.createable.factory; /** * 都听说荔枝好吃 * 社区的人都来买来尝尝。 * @author one * */ public class Test { /** * @param args */ public static void main(String[] args) { //工厂将荔枝打包,发往全国各地 LeecheeFactory lf=new LeecheeFactory(); //荔枝到达了中国皖南地区,那里的人也喜欢,就买了一点 Leechee leechee=lf.get(); //尝尝,的确不错 leechee.eat(); } }
得到的结果:
Eat Leechee
2、工厂方法模式
package patterns.createable.factory; /** * "大师兄,不好了,师傅被妖怪抓走了" * "出什么状况了?" * "我们的荔枝把妖怪培养成吃货,它们夹持了我们的师傅,要新口味的水果。" * "这...我来想办法。"思考良久,"老子的香蕉,难道也要分享给这群吃货。" * "恐怕那些吃货不肯吃啊!" * "呃...我们只要简单的包装一下。" * @author one * */ public abstract class Fruit { abstract void eat(); }
package patterns.createable.factory; /** * 新鲜口味的水果 * @author one * */ public class Banana extends Fruit { @Override void eat() { System.out.println("Eat Banana"); } }
package patterns.createable.factory; /** * 这个工厂就是生产香蕉的 * @author one * */ public class BananaFactory { Banana get(){ return new Banana(); } }
好了....师傅放回来了,可是每两周又被妖怪威胁要新的口味,导致我的工厂越来越多,没法管理了,怎么办?
统一一下:
package patterns.createable.factory; /** * 成立总部,专做水果生意 * @author one * */ public abstract class FruitFactory { abstract Fruit get(); }
公司改造,上市!
这样让所有的公司统一管理。至于是什么业务,生产什么水果,从总公司拿到订单,吩咐子公司去做就行了。
3、抽象工厂模式
【这个不说,可以理解为:水果加工产业,不属于水果生产,这个时候,就更高一层的把公司“工厂”抽象】
========================
在网上看到很多文章,看到很多人经常把简单工厂模式和工厂方法模式弄混淆,这里再说一下:工厂是具体实例,那么就是产品【荔枝】了,而工厂方法模式是一类产品的抽象【荔枝和香蕉都属于水果】。至于抽象工厂,就是不同产品类了,完全没有产品共性了,但属于莫一个公司【水果和水果加工产业都属于一个公司】,或者一个单位。更高一层的抽象。