参考:http://blog.csdn.net/jason0539/article/details/44976775
实例:
小红想买Ford品牌汽车,福特旗下品牌有fiesta, focus, mustang,gt,ranger。
首先创建
抽象产品类 Ford.Java 福特品牌
package com.javanet.designpatterns.factory.simple; /** * 工厂模式之 * 产品类 定义Ford汽车核心内容 */ public abstract class Ford { public Ford() { } }其次创建具体产品类旗下子品牌若干
Fiesta.java
package com.javanet.designpatterns.factory.simple; /** * 产品类 * Ford汽车 Fiesta系列 */ public class Fiesta extends Ford { public Fiesta() { System.out.println("Ford 之 Fiesta"); } }Focus.java
package com.javanet.designpatterns.factory.simple; /** * 产品类 * Ford汽车Focus系列 */ public class Focus extends Ford { public Focus() { System.out.println("Ford 之 Focus"); } }Mustang.java
package com.javanet.designpatterns.factory.simple; /** * 产品类 * Ford汽车Mustang系列 */ public class Mustang extends Ford { public Mustang() { System.out.println("Ford 之 Mustang"); } }至此产品类创建完毕,下面创建工厂类,也是与简单工厂模式最大区别的地方
创建工厂接口 FactoryFord.java
package com.javanet.designpatterns.factory.factorymethod; import com.javanet.designpatterns.factory.simple.Ford; /** * 工厂方法模式之 * 工厂接口 */ public interface FactoryFord { public Ford productFord(); }工厂接口实现类
MustangImpl.java
package com.javanet.designpatterns.factory.factorymethod; import com.javanet.designpatterns.factory.simple.Ford; import com.javanet.designpatterns.factory.simple.Mustang; /** * 制作mustang汽车实现类 */ public class MustangImpl implements FactoryFord { @Override public Ford productFord() { return new Mustang(); } }focusImpl.java
package com.javanet.designpatterns.factory.factorymethod; import com.javanet.designpatterns.factory.simple.Focus; import com.javanet.designpatterns.factory.simple.Ford; /** * 制作focus汽车实现类 */ public class FocusImpl implements FactoryFord { @Override public Ford productFord() { return new Focus(); } }至此小红就可以购买福特任意品牌的汽车了,定义小红类。
package com.javanet.designpatterns.factory.factorymethod; import com.javanet.designpatterns.factory.simple.Ford; /** * 小红买ford汽车 */ public class XiaoHong { public static void main(String[] args) { FactoryFord ff = new MustangImpl(); Ford mustang = ff.productFord(); ff = new FocusImpl(); Ford focus = ff.productFord(); } }
Ford 之 Mustang Ford 之 Focus