参考:http://blog.csdn.net/jason0539/article/details/44976775
实例:
小红想买Ford品牌汽车,福特旗下品牌有fiesta, focus, mustang,gt,ranger。
二、工厂方法模式,它的组成(Ford汽车为例):
1、工厂接口(Factory Interface ):核心,具体工程类必须实现的接口或继承的父类。用接口或抽象类实现。
2、具体工厂类(MustangImpl,、FocusImpl、 eg. ):含有和具体业务逻辑有关的代码,用来创建/制作产品。
3、抽象产品类(Abstract Ford):一般是具体产品继承的父类或实现的接口。
4、具体产品(Mustang、Focus、 eg.):抽象产品类的具体实现类,工厂类创建的对象就是它的实例。
首先创建
抽象产品类 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();
}
}
小红购买了 福特旗下mustang, focus两辆汽车
Ford 之 Mustang
Ford 之 Focus
以上就是工厂方法设计模式