抽象工厂模式

工厂模式:只能生产一个产品(单一产品,具体什么工厂就生产什么产品)  https://blog.csdn.net/jadeshu/article/details/23215933

 

抽象工厂:可以生产一个产品族(里面有很多产品组成)

 

C++代码:

#include <string>
#include <iostream>
using namespace std;
// 抽象工厂
// ---1.抽象工厂能生产一系统产品

// 产品基类A
class ProductA
{
public:
	virtual void Show() = 0;
};

// 具体产品A1
class ProductA1 : public ProductA
{ 
public:
	void Show() override
	{
		cout << "I'm ProductA1" << endl;
	}

};

// 具体产品A2
class ProductA2 : public ProductA
{ 
public:
	void Show() override
	{
		cout << "I'm ProductA2" << endl;
	}
};

// 产品基类B
class ProductB
{
public:
	virtual void Show() = 0;
};

// 具体产品B1
class ProductB1 : public ProductB
{
public:
	void Show() override
	{
		cout << "I'm ProductB1" << endl;
	}

};

// 具体产品B2
class ProductB2 : public ProductB
{
public:
	void Show() override
	{
		cout << "I'm ProductB2" << endl;
	}
};

// 抽象工厂基类(具备能生产产品A和产品B两种产品的能力)
class AbstractFactory
{
public:
	virtual ProductA* createProductA() = 0;
	virtual ProductB* createProductB() = 0;
};

// 工厂1(能生产产品A和产品B的具体产品)
class Factory1 : public AbstractFactory
{
public:
	ProductA* createProductA() override
	{
		return new ProductA1();
	}
	ProductB* createProductB() override
	{
		return new ProductB1();
	}
};

// 工厂2(能生产产品A和产品B的具体产品)
class Factory2 : public AbstractFactory
{
public:
	ProductA* createProductA() override
	{
		return new ProductA2();
	}
	ProductB* createProductB() override
	{
		return new ProductB2();
	}
};


int main()
{
	AbstractFactory *factoryObj1 = new Factory1();
	ProductA *productObjA1 = factoryObj1->createProductA();
	ProductB *productObjB1 = factoryObj1->createProductB();

	productObjA1->Show();
	productObjB1->Show();

	AbstractFactory *factoryObj2 = new Factory2();
	ProductA *productObjA2 = factoryObj2->createProductA();
	ProductB *productObjB2 = factoryObj2->createProductB();

	productObjA2->Show();
	productObjB2->Show();

	system("pause");
	return 0;
}

运行结果:

 

JAVA代码:

package cn.jadeshu.Module;

/**
 * @ClassName: ProductA 
 * @version V1.0
 * @author: jadeshu
 * @Description:抽象工厂方法
 * 1.抽象工厂能生产一系统产品
 */

// 产品A接口
interface ProductA{
	void Show();
}

// 具体产品A1
class ProductA1 implements ProductA{

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

// 具体产品A2
class ProductA2 implements ProductA{

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

//产品B接口
interface ProductB{
	void Show();
}

// 具体产品B1
class ProductB1 implements ProductB{

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

// 具体产品B2
class ProductB2 implements ProductB{

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

// 抽象工厂接口(具备能生产产品A和产品B两种产品的能力)
interface AbstractFactory{
	ProductA createProductA();
	ProductB createProductB();
}

// 工厂1(能生产产品A1和产品B1的具体产品)
class Factory1 implements AbstractFactory{

	@Override
	public ProductA createProductA() {
		return new ProductA1();
	}

	@Override
	public ProductB createProductB() {
		return new ProductB1();
	}
	
}

// 工厂2(能生产产品A2和产品B2的具体产品)
class Factory2 implements AbstractFactory{

	@Override
	public ProductA createProductA() {
		return new ProductA2();	
	}

	@Override
	public ProductB createProductB() {
		return new ProductB2();
	}
	
}
public class AbstractFactoryTest {

	public static void main(String[] args) {
		AbstractFactory factory1 = new Factory1();
		ProductA pA1 = factory1.createProductA();
		ProductB pB1 = factory1.createProductB();
		
		pA1.Show();
		pB1.Show();
		
		AbstractFactory factory2 = new Factory2();
		ProductA pA2 = factory2.createProductA();
		ProductB pB2 = factory2.createProductB();
		
		pA2.Show();
		pB2.Show();
	}

}

运行结果:

 

posted @ 2019-01-21 17:58  jadeshu  阅读(110)  评论(0编辑  收藏  举报