UML和设计模式——简单工厂模式、工厂模式

简单工厂模式

简单工厂模式通过定义一个类来创建其他类的实例。但不是标准的设计模式

当需求发生变化时需要修改代码 不符合开闭原则

简单工厂模式分三种角色:
1.工厂角色
2.抽象角色
3.具体角色

UML和设计模式——简单工厂模式、工厂模式_第1张图片
抽象角色是具体角色的父类

#include
using namespace std;
class Person
{
     
public:
	virtual void work() = 0;
};
class Student:public Person
{
     
public:
	virtual void work()
	{
     
		cout << "go to school" << endl;
	}
};
class Teacher :public Person
{
     
public:
	virtual void work()
	{
     
		cout << "teach students" << endl;
	}
};
class Factory
{
     
public:
	Person* getPerson(string type)
	{
     
		if (type == "student")
		{
     
			return new Student;
		}
		else if (type == "teacher")
		{
     
			return new Teacher;
		}
	}

};

int main()
{
     
	string type;
	Factory* f = new Factory;
	Person* p = nullptr;

	type = "student";
	p = f->getPerson(type);
	p->work();
	type = "teacher";
	p = f->getPerson(type);
	p->work();
	delete p;
	delete f;


	return 0;
}

工厂模式

符合开闭原则的工厂模式:
此时有新的需求只需要增加代码不需要修改代码
1.创建新的工厂继承于抽象工厂
2.创建新的产品继承于抽象产品
3.使用新的工厂创建新的产品

UML和设计模式——简单工厂模式、工厂模式_第2张图片

#include
using namespace std;
class Fruit
{
     
public:
	virtual void sayname() = 0;
};
class Apple :public Fruit
{
     
public:
	virtual void sayname()
	{
     
		cout << "apple" << endl;
	}
};
class Orange :public Fruit
{
     
public:
	virtual void sayname()
	{
     
		cout << "orange" << endl;
	}
};

class AbsFactory
{
     
public:
	virtual Fruit* CreateFruit() = 0;
};
class AppleFactory:public AbsFactory
{
     
public:
	virtual Fruit* CreateFruit()
	{
     
		return new Apple;
	}
};
class OrangeFactory:public AbsFactory
{
     
public:
	virtual Fruit* CreateFruit()
	{
     
		return new Orange;
	}
};

//新增品种
class NewFruit:public Fruit
{
     
public:
	virtual void sayname()
	{
     

		cout << "NewFruit" << endl;
	}
};
class NewFactory:public AbsFactory
{
     
public:
	virtual Fruit* CreateFruit()
	{
     
		return new NewFruit;
	}
};


int main()
{
     
	Fruit* fruit = nullptr;
	AbsFactory* absf = nullptr;

	absf = new AppleFactory;
	fruit = absf->CreateFruit();
	fruit->sayname();

	delete absf;
	delete fruit;
	absf = nullptr;
	fruit = nullptr;

	absf = new OrangeFactory;
	fruit = absf->CreateFruit();
	fruit->sayname();

	delete absf;
	delete fruit;
	absf = nullptr;
	fruit = nullptr;

	absf = new NewFactory;
	fruit = absf->CreateFruit();
	fruit->sayname();


	delete absf;
	delete fruit;
	absf = nullptr;
	fruit = nullptr;

	return 0;
}

你可能感兴趣的:(UML和设计模式)