zoukankan      html  css  js  c++  java
  • 设计模式C++实现_2_简单工厂模式

    简单工厂模式


    主要用于创建对象。 新加入类时。 不会影响曾经的系统代码。

    核心思想是用一个工厂来依据输入的条件产生不同的类,然后依据不同类的 virtual 函数得到不同的结果.


    以下以苹果手机的生产为例。模拟手机生产工厂。

    苹果手机有各种不同的型号,有Iphone4、Iphone4s、Iphone5等等。

    我们通过一个工厂来生产,client依据客户的需求生产不同型号的手机。

    代码例如以下:

    Apple.h

    #pragma once
    #include <iostream>
    
    class Apple
    {
    public:
    	Apple();
    	virtual ~Apple();
    
    	virtual void ShowVersion() = 0;
    	virtual void MakeCall(const std::string &num) = 0;
    };

    Apple.cpp

    #include "Apple.h"
    
    Apple::Apple()
    {
    }
    
    Apple::~Apple()
    {
    }
    

    Apple4.h

    #pragma once
    #include "Apple.h"
    
    class Apple4 : public Apple
    {
    public:
    	Apple4();
    	~Apple4();
    
    	virtual void ShowVersion();
    	virtual void MakeCall(const std::string &num);
    };

    Apple4.cpp

    #include "Apple4.h"
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    Apple4::Apple4()
    {
    	cout << "Apple4 Created!" << endl;
    }
    
    Apple4::~Apple4()
    {
    };
    
    void Apple4::ShowVersion()
    {
    	cout << "I'm Apple4" << endl;
    }
    
    void Apple4::MakeCall(const std::string &num)
    {
    	cout << "I'm Call num :" << num << endl;
    }

    Apple4s.h

    #pragma once
    #include "Apple.h"
    
    class Apple4s : public Apple
    {
    public:
    	Apple4s();
    	~Apple4s();
    
    	virtual void ShowVersion();
    	virtual void MakeCall(const std::string &num);
    };

    Apple4s.cpp

    #include "Apple4s.h"
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    Apple4s::Apple4s()
    {
    	cout << "Apple4s Created!" << endl;
    }
    
    Apple4s::~Apple4s()
    {
    };
    
    void Apple4s::ShowVersion()
    {
    	cout << "I'm Apple4s" << endl;
    }
    
    void Apple4s::MakeCall(const std::string &num)
    {
    	cout << "I'm Call num :" << num << endl;
    }

    AppleFactory.h

    #pragma once 
    #include "Apple.h"
    #include <string>
    
    class AppleFactory
    {
    public:
    	AppleFactory();
    	~AppleFactory();
    
    	static Apple * MakePhone(const std::string &version);//声明为静态成员函数
    
    };

    AppleFactory.cpp

    #include "AppleFactory.h"
    #include "Apple4.h"
    #include "Apple4s.h"
    #include <iostream>
    #include <string>
    
    AppleFactory::AppleFactory()
    {
    }
    
    AppleFactory::~AppleFactory()
    {
    }
    
    Apple * AppleFactory::MakePhone(const std::string &version)
    {
    	if(version == "Apple4")
    	{
    		return new Apple4();
    	}
    	if(version == "Apple4s")
    	{
    		return new Apple4s();
    	}
    	return NULL;
    }
    

    main.cpp
    #include "AppleFactory.h"
    #include <iostream>
    
    int main()
    {
    	Apple * A4 = AppleFactory::MakePhone("Apple4");
    	A4->ShowVersion();
    	A4->MakeCall("10086");
    
    	std::cout << "------------------" << std::endl;
    
    	Apple * A4s = AppleFactory::MakePhone("Apple4s");
    	A4s->ShowVersion();
    	A4s->MakeCall("10010");
    	
    	return 0;
    }
    
    /*
    执行结果:
    
    Apple4 Created!
    I'm Apple4
    I'm Call num :10086
    ------------------
    Apple4s Created!
    I'm Apple4s
    I'm Call num :10010
    请按随意键继续. . .
    */

    这个模式也叫静态工厂模式,由于依赖的是工厂类中的静态方法。



  • 相关阅读:
    双十一脱单就靠它:创维小湃蓝牙音箱体验评测
    专注产品真正价值:iWALK真无线蓝牙耳机体验评测
    美好的童年伙伴:360 智能儿童手表 P1体验评测
    前端也要学系列:设计模式之装饰者模式
    前端也要学系列:设计模式之策略模式
    你不知道的Javascript:有趣的setTimeout
    接受”不完美“:分布式事务学习总结
    如何进行团队技术分享
    又是一年寒冬时
    mybatis ~ 批量更新(sql循环)update foreach
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6883144.html
Copyright © 2011-2022 走看看