设计模式(C++实现):simple factory pattern + singleton pattern
来源:互联网 发布:网络推广是做什么 编辑:程序博客网 时间:2024/06/05 11:29
1简单工厂模式
简单工厂模式按照设计模式类型分的话是属于创建型模式,他是工厂模式中最简单的一种,他不属于GoF 23中设计模式之一,但是是简单实用的。他是有一个工厂对象来决定创建哪一种对象的实例。
实现比较简单,这里我只贴出类图和调用方法:
- IProduct * simpleFactory::Create(std::string className)
- {
- if( className == "Ipad")
- return new Ipad();
- if(className == "IPhone")
- return new IPhone();
- }
缺点:违反里高内聚责任分配原则,将全部逻辑放到一个工厂类中,如果需要支持新的类,那就必须改变工厂类了。
这里只有一种工厂,一个系列的产品,那如果有多个系列的产品呢?问题如何解决?
应用场景:
1. 我的asp.net程序需要根据客户实际所用数据库来配置,那么我的程序支持所有的数据库,具体用到哪个,配置文件配置一下即可。这个C#/Java里的反射就可以实现。
2. MFC里的Seralize功能。
2.单例模式,顾名思义,就是只能由一个实例,那么我们就必须保证
- 该类不能被复制。
- 该类不能被公开的创造。
那么对于C++来说,他的构造函数,拷贝构造函数和他的赋值函数都不能被公开调用。
但对于该私有的构造函数的构造时机上来说也可以分两种情况来构造:
- 只有当需要该类的时候去构造(即为懒汉模式)
- 在程序开始之前我就先构造好,你到时候直接用就可(即为饿汉模式)
那么我分别来说说这两种模式:
- 懒汉模式,静态局部变量只会被初始化一次即第一次执行的时候,其生命周期与程序的生命周期是相同的。这个同样适用于多线程的情况。
- class single1
- {
- public:
- static single1 &getInstance()
- {
- static single1 instance;
- return instance;
- }
- void helloSingle() {cout<<"Hello Single1!"<<endl;}
- private:
- single1(){};
- single1(const single1&);
- single1& operator=(const single1&);
- };
- 饿汉模式,但是在main函数外面必须先调用其实例的构造,这个是静态实例的初始化,C/C++会保证其在进入main函数之前进行。
- class single2
- {
- public:
- static single2* getInstance()
- {
- return mInstance;
- }
- void helloSingle() {cout<<"Hello Single2!"<<endl;}
- private:
- static single2* mInstance;
- private:
- single2(){};
- single2(const single2&);
- single2& operator=(const single2&);
- };
- single2* single2::mInstance = new single2;
- #include<iostream>
- using namespace std;
- class single1
- {
- public:
- static single1 &getInstance()
- {
- static single1 instance;
- return instance;
- }
- void helloSingle() {cout<<"Hello Single1!"<<endl;}
- private:
- single1(){};
- single1(const single1&);
- single1& operator=(const single1&);
- };
- class single2
- {
- public:
- static single2* getInstance()
- {
- return mInstance;
- }
- void helloSingle() {cout<<"Hello Single2!"<<endl;}
- private:
- static single2* mInstance;
- private:
- single2(){};
- single2(const single2&);
- single2& operator=(const single2&);
- };
- single2* single2::mInstance = new single2;
- int main()
- {
- single1 *a=&single1::getInstance();
- single2 *b=single2::getInstance();
- a->helloSingle();
- b->helloSingle();
- return 0;
- }
我们运用静态局部变量和静态实例的特性,使得我们的这两种模式都适用于多线程。
- 设计模式(C++实现):simple factory pattern + singleton pattern
- C#设计模式-Simple Factory Pattern
- C# 设计模式之Simple Factory Pattern
- Design Pattern: Simple Factory 模式
- 小菜学设计模式 工厂设计模式 Simple Factory Pattern
- 设计模式-----(Factory pattern)
- 设计模式--factory pattern
- 设计模式之简单工厂模式(Simple Factory Pattern)
- 设计模式1:Simple Factory Pattern(简单工厂模式)
- c++设计模式:简单工厂模式(Simple Factory Pattern)
- JAVA设计模式之 简单工厂模式【Simple Factory Pattern】
- 【JAVA设计模式】简单工厂模式(Simple Factory Pattern)
- C#设计模式之简单工厂模式(Simple Factory Pattern)
- 设计模式(1):简单工厂模式(Simple Factory Pattern)
- Java设计模式:简单工厂模式(Simple Factory Pattern)
- Java设计模式--简单工厂模式【Simple Factory Pattern】
- Simple Factory Pattern 简单工厂模式——《深入浅出设计模式(C#/Java版)》
- 大话设计模式c++实现1——简单工厂模式 Simple Factory Pattern
- Qt中定义可点击标签
- 修改myeclipse jsp 页面显示方式
- 软键盘遮挡edittext处理
- spring之orm组件
- 一致性哈希算法及其在分布式系统中的应用
- 设计模式(C++实现):simple factory pattern + singleton pattern
- UML总体总结图
- 程序猿解决问题1-table赋值
- C++新型类型转化 和内部嵌套类
- test
- sql语句 IF函数的用法
- Make 使用自动变量
- 友元函数(类中的成员函数作为友元函数)
- linux date 格式化时间和日期