[设计模式]工厂方法模式

参考: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

以上就是工厂方法设计模式






你可能感兴趣的:(设计模式,工厂模式)