简单工厂模式(Simple Factory Pattern),又称为静态工厂方法(static Factory Method),它属于建立型模式。
在简单工厂模式中,能够根据参数的不一样返回不一样类的实例。简单工厂模式专门定义一个类来负责建立其余类的实例,被建立的实例一般都具备共同的父类。
好比有一个电脑商,目前生产联想电脑,随着业务扩展,他如今须要生产惠普的电脑,咱们就须要一个单独的类来专门生产电脑,这就用到了简单工厂模式。
下面以代码为例:java
接口:git
package designpattern.factory.simplefactory.noodles; public interface INoodles { /** * 描述每种面条啥样的 */ public abstract void desc(); }
package designpattern.factory.simplefactory.noodles; public class LzNoodles implements INoodles { @Override public void desc() { System.out.println("兰州拉面,兰州特点小吃"); } }
package designpattern.factory.simplefactory.noodles; public class PaoNoodles implements INoodles { @Override public void desc() { System.out.println("泡面,程序员必备"); } }
package designpattern.factory.simplefactory.noodles; public class ReganNoodles implements INoodles { @Override public void desc() { System.out.println("红油热干面,武汉特点小吃"); } }
package designpattern.factory.simplefactory; import designpattern.factory.simplefactory.noodles.INoodles; import designpattern.factory.simplefactory.noodles.LzNoodles; import designpattern.factory.simplefactory.noodles.PaoNoodles; import designpattern.factory.simplefactory.noodles.ReganNoodles; /** * 简单工厂模式 * 一家“简单面馆”(简单工厂类) */ public class SimpleNoodlesFactory { public static final int TYPE_LZ = 1;//兰州拉面 public static final int TYPE_PM = 2;//泡面 public static final int TYPE_GK = 3;//热干面 /** * 若是生产对象的方法是static的,这种简单工厂也叫作静态工厂 * 若是生产对象的方法不是static的,这种简单工厂也叫作实例工厂 * @param type * @return */ public static INoodles createNoodles(int type) { switch (type) { case 1: return new LzNoodles(); case 2: return new PaoNoodles(); case 3: return new ReganNoodles(); default: return new LzNoodles(); } } }
package designpattern.factory.simplefactory; import designpattern.factory.simplefactory.noodles.INoodles; import designpattern.factory.simplefactory.noodles.LzNoodles; public class Test { public static void main(String[] args) { /** * 一开始,穷,想吃面必须得本身作 * 想吃拉面得本身作,new LzNoodles() * 想吃泡面得本身作,new PaoNoodles() * 想吃热干面得本身作,new ReganNoodles() */ // 作拉面吃 INoodles lzNoodles = new LzNoodles(); // 作泡面吃 // INoodles paoNoodles = new PaoNoodles(); // 作热干面吃 // INoodles reganNoodles = new ReganNoodles(); // 然而,new来new去,改来改去,好心烦...... /** * 突然,有一天走了狗屎运成了暴发户 * 幸福生活今后来临,吃面今后变得简单 * 给面馆说一声想吃啥,面馆作好了给本身就行了 * 本身没必要关心面条怎么作(怎么new,如何new)让面馆操心去吧(面馆帮咱们new)! * 好省心,有钱就是好,太爽了! */ INoodles iNoodles = SimpleNoodlesFactory.createNoodles(2); // 和具体的对象脱离关系 iNoodles.desc(); /**考虑使用工厂模式 * 1) 当客户程序不须要知道要使用对象的建立过程。 * 2) 客户程序使用的对象存在变更的可能,或者根本就不知道使用哪个具体的对象。 */ } }
工厂方法模式是比较复杂一点的工厂模式的体现,主要是经过建立工厂类来进行对对象的构建。程序员
package designpattern.factory.factorymethod; import designpattern.factory.simplefactory.noodles.INoodles; /** * 工厂方法模式 */ public interface INoodlesFactory { INoodles createNoodles(); }
package designpattern.factory.factorymethod; import designpattern.factory.simplefactory.noodles.INoodles; import designpattern.factory.simplefactory.noodles.LzNoodles; public class LzINoodlesFactory implements INoodlesFactory { @Override public INoodles createNoodles() { return new LzNoodles(); } }
package designpattern.factory.factorymethod; import designpattern.factory.simplefactory.noodles.INoodles; import designpattern.factory.simplefactory.noodles.PaoNoodles; public class PaoINoodlesFactory implements INoodlesFactory { @Override public INoodles createNoodles() { return new PaoNoodles(); } }
package designpattern.factory.factorymethod; import designpattern.factory.simplefactory.noodles.INoodles; import designpattern.factory.simplefactory.noodles.ReganNoodles; public class ReganINoodlesFactory implements INoodlesFactory { @Override public INoodles createNoodles() { return new ReganNoodles(); } }
package designpattern.factory.factorymethod; import designpattern.factory.simplefactory.noodles.INoodles; public class Test { public static void main(String[] args) { INoodlesFactory noodlesFactory = new LzINoodlesFactory(); INoodles noodles = noodlesFactory.createNoodles(); noodles.desc(); } }
代码实例:
设计模式demo设计模式