abstract factory

本文介绍了一种使用抽象工厂模式创建产品的实现方式。通过定义抽象接口和具体实现类,展示了如何根据不同需求选择不同的产品部件组合,并提供了Java和C++两种语言的实现示例。
package abstract_factory.inf;

public interface IAbstractfactory 
{
	public IPartA createPartA ();
	public IPartB createPartB ();
	public IPartC createPartC ();
}
package abstract_factory.inf;

public interface IPartA 
{
	public void show ();
}
package abstract_factory.inf;

public interface IPartB 
{
	public void action ();
}
package abstract_factory.inf;

public interface IPartC 
{
	public void dosomething();
}

package abstract_factory.imp;

import abstract_factory.inf.IAbstractfactory;
import abstract_factory.inf.IPartA;
import abstract_factory.inf.IPartB;
import abstract_factory.inf.IPartC;

public class Abstractfactory1 implements IAbstractfactory
{
	@Override
	public IPartA createPartA() 
	{
		return new PartA1();
	}

	@Override
	public IPartB createPartB() 
	{
		return new PartB1();
	}

	@Override
	public IPartC createPartC() 
	{
		return new PartC1();
	}
}
package abstract_factory.imp;

import abstract_factory.inf.IAbstractfactory;
import abstract_factory.inf.IPartA;
import abstract_factory.inf.IPartB;
import abstract_factory.inf.IPartC;

public class Abstractfactory2 implements IAbstractfactory
{
	@Override
	public IPartA createPartA() 
	{
		return new PartA2();
	}

	@Override
	public IPartB createPartB() 
	{
		return new PartB2();
	}

	@Override
	public IPartC createPartC() 
	{
		return new PartC2();
	}
}
package abstract_factory.imp;

import abstract_factory.inf.IPartA;

public class PartA1 implements IPartA
{
	@Override
	public void show() 
	{	
		System.out.println ("In class PartA1");
	}
}
package abstract_factory.imp;

import abstract_factory.inf.IPartA;

public class PartA2 implements IPartA
{
	@Override
	public void show() 
	{
		System.out.println ("In class PartA2");
	}
}

package abstract_factory.imp;

import abstract_factory.inf.IPartB;

public class PartB1 implements IPartB
{
	@Override
	public void action() 
	{
		System.out.println ("In class PartB1");
	}
}

package abstract_factory.imp;

import abstract_factory.inf.IPartB;

public class PartB2 implements IPartB
{
	@Override
	public void action() 
	{
		System.out.println ("In class PartB2");
	}
}

package abstract_factory.imp;

import abstract_factory.inf.IPartC;

public class PartC1 implements IPartC
{
	@Override
	public void dosomething() 
	{
		System.out.println ("In class PartC1");
	}
}
package abstract_factory;

import abstract_factory.imp.Abstractfactory1;
import abstract_factory.imp.Abstractfactory2;
import abstract_factory.inf.IAbstractfactory;
import abstract_factory.inf.IPartA;
import abstract_factory.inf.IPartB;
import abstract_factory.inf.IPartC;

public class Product {

	private IPartA partA = null;
	private IPartB partB = null;
	private IPartC partC = null;
	
	Product (IAbstractfactory af)
	{
		register (af);
	}
	
	public void show ()
	{
		partA.show();
		partB.action();
		partC.dosomething();
	}
	
	public void register (IAbstractfactory af)
	{
		this.partA = af.createPartA();
		this.partB = af.createPartB();
		this.partC = af.createPartC();
	}

	public static void main(String[] args) 
	{
		Product obj = new Product (new Abstractfactory1());
		obj.show ();
		obj.register (new Abstractfactory2());
		obj.show ();
	}
}


 

// c++ 版

 

#ifndef _abstract_factory_h_
#define _abstract_factory_h_
// interface class
class IPartA;
class IPartB;
class IPartC;
class IAbstractfactory;

class IAbstractfactory
{
public:
	virtual IPartA* createPartA () = 0;
	virtual IPartB* createPartB () = 0;
	virtual IPartC* createPartC () = 0;
	virtual ~IAbstractfactory () {}
};

class IPartA
{
public:
	virtual void showPartA () = 0;
	virtual ~IPartA () {}
};

class IPartB
{
public:
	virtual void showPartB () = 0;
	virtual ~IPartB () {}
};

class IPartC
{
public:
	virtual void showPartC () = 0;
	virtual ~IPartC () {}
};


// class product
class Product
{
public:
    Product (IAbstractfactory* af);
    ~Product ();
public:
    void changestyle (IAbstractfactory* af);
	void showself ();
private:
    IPartA* m_partA;
    IPartB* m_partB;
    IPartC* m_partC;
};


// impliment IAbstractfactory
class Abstractfactory1 : public IAbstractfactory
{
public:
	virtual IPartA* createPartA ();
	virtual IPartB* createPartB ();
	virtual IPartC* createPartC ();
	virtual ~Abstractfactory1 () {}
};

class Abstractfactroy2 : public IAbstractfactory
{
public:
	virtual IPartA* createPartA ();
	virtual IPartB* createPartB ();
	virtual IPartC* createPartC ();
	virtual ~Abstractfactroy2 () {}
};

// implement IPartA
class PartA1 : public IPartA
{
public:
	virtual ~PartA1 () {};
	virtual void showPartA ();
};

class PartA2 : public IPartA
{
public:
	virtual ~PartA2 () {};
	virtual void showPartA ();
};

// implement IPartB
class PartB1 : public IPartB
{
public:
	virtual ~PartB1 () {};
	virtual void showPartB ();
};

class PartB2 : public IPartB
{
public:
	virtual ~PartB2 () {};
	virtual void showPartB ();
};

// implement IPartC
class PartC1 : public IPartC
{
public:
	virtual ~PartC1 () {};
	virtual void showPartC ();
};

class PartC2 : public IPartC
{
public:
	virtual ~PartC2 () {};
	virtual void showPartC ();
};

#endif

 

.cpp

#include <iostream>
using namespace std;
#include "abstractfactory.h"

// Product
Product::Product (IAbstractfactory* af)
{
	m_partA = af->createPartA();
	m_partB = af->createPartB();
	m_partC = af->createPartC();
}

Product::~Product ()
{
	delete m_partA;
	delete m_partB;
	delete m_partC;
}

void Product::showself ()
{
	m_partA->showPartA ();
	m_partB->showPartB ();
	m_partC->showPartC ();
}

void Product::changestyle (IAbstractfactory* af)
{
	delete m_partA;
	m_partA = af->createPartA();
	delete m_partB;
	m_partB = af->createPartB();
	delete m_partC;
	m_partC = af->createPartC();
}

// Abstractfactory1
IPartA* Abstractfactory1::createPartA ()
{
	return new PartA1();
}

IPartB* Abstractfactory1::createPartB ()
{
	return new PartB1();
}

IPartC* Abstractfactory1::createPartC ()
{
	return new PartC1();
}

// Abstractfactory2
IPartA* Abstractfactroy2::createPartA ()
{
	return new PartA2();
}

IPartB* Abstractfactroy2::createPartB ()
{
	return new PartB2();
}

IPartC* Abstractfactroy2::createPartC ()
{
	return new PartC2();
}

// PartA1
void PartA1::showPartA ()
{
	cout<<"In class partA1"<<endl;
}
// PartA2
void PartA2::showPartA ()
{
	cout<<"In class partA2"<<endl;
}
// PartB1
void PartB1::showPartB ()
{
	cout<<"In class partB1"<<endl;
}
// PartB2
void PartB2::showPartB ()
{
	cout<<"In class partB2"<<endl;
}
// PartC1
void PartC1::showPartC ()
{
	cout<<"In class partC1"<<endl;
}
// PartC2
void PartC2::showPartC ()
{
	cout<<"In class partC2"<<endl;
}

int main ()
{
	IAbstractfactory* af1 = new Abstractfactory1();
	IAbstractfactory* af2 = new Abstractfactroy2();
	Product obj (af1);
	obj.showself ();
	obj.changestyle (af2);
	obj.showself ();
	return 0;	
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值