zoukankan      html  css  js  c++  java
  • 第七次课程作业

    第七次课程作业

    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,使用的时候根本无需修改代码。提供的类型也可以用比较便于识别的字符串,这样不用记很长的类名,还可以保存为配置文件。

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

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


    参考文献

  • 相关阅读:
    Zookeeper系列(二)特征及应用场景
    Scala学习笔记(三)类层级和特质
    zookeeper系列(一)安装
    Scala学习笔记(二)表达式和函数
    Spring笔记(四)SpingAOP
    Spring笔记(三)AOP前篇之动态代理
    Scala学习笔记(一)数据类型
    Linux内核系列设备模型(一) Kobject与Kset
    Spring笔记(二)Core层
    Linux内核系列之Block块层(一)
  • 原文地址:https://www.cnblogs.com/lzhkami/p/6958850.html
Copyright © 2011-2022 走看看