工厂方法模式

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

 下面例子中就是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();
	}

}

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值