工厂方法模式
工厂模式:只能生产一个产品(单一产品,具体什么工厂就生产什么产品)
下面例子中就是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();
}
}
运行结果: