工厂方法模式

 工厂模式:只能生产一个产品(单一产品,具体什么工厂就生产什么产品)

 下面例子中就是A工厂生产具体A产品,B工厂生产具体B产品!

C++代码:

#include <iostream>
using namespace std;
// 工厂方法模式案例
// ---1.工厂方法只能生产单一产品
// ---2.具体产品工厂生产具体产品

//产品抽象类
class Product
{
public:
	virtual ~Product() {};
	virtual void show() = 0;

};

//产品A
class ProductA : public Product
{
public:
	virtual ~ProductA() {};
	void show() { cout << "ProductA" << endl; }
};

//产品B
class ProductB : public Product
{
public:
	virtual ~ProductB() {};
	void show() { cout << "ProductB" << endl; }
};

//简单工厂类
class Factory
{
public:
	virtual Product *CreateProduct() = 0;
};

//派生工厂A
class FactoryA : public Factory
{
public:
	Product *CreateProduct()
	{
		return new ProductA();
	}
};
//派生工厂B
class FactoryB : public Factory
{
public:
	Product *CreateProduct()
	{
		return new ProductB();
	}
};


int main()
{
	Factory *pFactoryA = new FactoryA();
	Product* pA = pFactoryA->CreateProduct();
	pA->show();

	Factory *pFactoryB = new FactoryB();
	Product* pB = pFactoryB->CreateProduct();
	pB->show();

	delete pFactoryA;
	delete pFactoryB;

	system("pause");
	return 0;
}

运行结果:

JAVA代码:

package cn.jadeshu.Module;

/**
 * @ClassName: Product 
 * @version V1.0
 * @author: jadeshu
 * @Description:工厂方法
 * 工厂方法:生产单一产品,具体什么工厂生产什么产品
 */
// 产品接口
interface ProductC{
	void Show();
}

// 具体产品C1
class ProductC1 implements ProductC{

	@Override
	public void Show() {
		System.out.println("I'm ProductC1");
	}
	
}

// 具体产品C2
class ProductC2 implements ProductC{

	@Override
	public void Show() {
		System.out.println("I'm ProductC2");
	}
	
}

// 抽象工厂接口
interface Factory{
	ProductC createProduct();
}

// 工厂C1(能生产产品C1的具体产品)
class ProductC1Factory implements Factory{

	@Override
	public ProductC createProduct() {
		return new ProductC1();
	}
	
}

// 工厂C2(能生产产品C2的具体产品)
class ProductC2Factory implements Factory{

	@Override
	public ProductC createProduct() {
		return new ProductC2();
	}
	
}

public class FactoryTest {

	public static void main(String[] args) {
		ProductC1Factory f1 = new ProductC1Factory();
		ProductC p1 =  f1.createProduct();
		p1.Show();
		
		ProductC2Factory f2 = new ProductC2Factory();
		ProductC p2 =  f2.createProduct();
		p2.Show();
	}

}

运行结果:

 

posted @ 2014-04-08 22:47  jadeshu  阅读(79)  评论(0编辑  收藏  举报