第七次课程作业

第七次课程作业

git提交链接


继承代码

这次作业分为两个部分,主要考察刚学的继承派生的知识,还有简单工厂模式的学习。在 git上提交的是工厂模式的代码,直接的方法如下:

#include <ctime>
#include <iostream>
using namespace std;
class Random //基类
{
public:
	virtual void random();
	Random() {};
};
class RandomNumber :public Random //生成数字的类
{
private:int num;
public:
	void random()
	{
		srand(time(0));
		num = rand() % 10;
	}
	RandomNumber() {  };
};
class RandomOperation :public Random //生成运算符的类
{
private:char ope;
public:
	void random()
	{
		srand(time(0));
		int n;
		n = rand() % 4;
		switch (n)
		{
		case 0:ope = '+'; break;
		case 1:ope = '-'; break;
		case 2:ope = '*'; break;
		case 3:ope = '/'; break;
		}
	}
	RandomOperation() {};
};

简单工厂模式的学习

通过查阅资料了解到,工厂模式共有三种:简单工厂模式、工厂模式、抽象工厂模式,复杂程度递增。按我的理解简单工厂模式就是一个工厂能生产出不同类型的商品(工厂为一个类),然后客户把需求告诉工厂,工厂通过判断制造出相应的商品。

优点

1.隐藏了对象创建的细节,将产品的实例化推迟到子类中实现。

2.客户端基本不用关心使用的是哪个产品,只需要知道用哪个工厂就行了,提供的类型也可以用比较便于识别的字符串。

3.方便添加新的产品子类,每次只需要修改工厂类传递的类型值就行了。

4.遵循了依赖倒转原则。

缺点

1.要求产品子类的类型差不多,使用的方法名都相同,如果类比较多,而所有的类又必须要添加一种方法,则会是非常麻烦的事情。或者是一种类另一种类有几种方法不相同,客户端无法知道是哪一个产品子类,也就无法调用这几个不相同的方法。

2.每添加一个产品子类,都必须在工厂类中添加一个判断分支,这违背了开放-封闭原则。

常用的场景

例如部署多种数据库的情况,可能在不同的地方要使用不同的数据库,此时只需要在配置文件中设定数据库的类型,每次再根据类型生成实例,这样,不管下面的数据库类型怎么变化,在客户端看来都是只有一个AbstractProduct,使用的时候根本无需修改代码。提供的类型也可以用比较便于识别的字符串,这样不用记很长的类名,还可以保存为配置文件。

这样,每次只需要修改配置文件和添加新的产品子类即可。

所以简单工厂模式一般应用于多种同类型类的情况,将这些类隐藏起来,再提供统一的接口,便于维护和修改。


参考文献

posted @ 2017-06-07 20:03  乐乐kami  阅读(115)  评论(0编辑  收藏  举报