当前位置: 首页 > news >正文

邵阳网站推广人与马做的网站

邵阳网站推广,人与马做的网站,做文案的网站,数字校园建设专题网站c两种设计模式 单例和工厂模式 一.单例 1.单例的概念 1.当前的类最多只能创建一个实例 2.当前这个唯一的实例#xff0c;必须由当前类创建#xff08;自主创建#xff09;#xff0c;而不是调用者创建 3.必须向整个系统提供全局的访问点#xff0c;来获取唯一的实例 …c两种设计模式 单例和工厂模式 一.单例 1.单例的概念 1.当前的类最多只能创建一个实例 2.当前这个唯一的实例必须由当前类创建自主创建而不是调用者创建 3.必须向整个系统提供全局的访问点来获取唯一的实例 2.单例的代码 #include iostream using namespace std;class CSingleton {CSingleton(){}CSingleton(const CSingleton) delete;//弃用拷贝构造函数static CSingleton* m_spring;~CSingleton() {} public:static struct DeleteSingleton {//保证申请的堆空间一定被回收~DeleteSingleton() {if(m_spring)delete m_spring;m_spring nullptr;}} del;//静态对象在程序结束时静态对象会自动被回收然后就会调用析构函数就一定能保证申请的堆空间被回收//有问题的代码在多线程下可能会创建多个对象static CSingleton* CreatCSingleton() {//加锁if (!m_spring) {//如果指针为空则创建对象m_spring new CSingleton;}//解锁return m_spring;}static void DestoryCSingleton(CSingleton* psin) {if (m_spring)delete m_spring;m_spring nullptr;psin nullptr;}/*~CSingleton() {//这里不能使用析构进行回收这里回收的是对象这样的话就会不断的调用析构if (m_spring) {delete m_spring;m_spring nullptr;}}*/}; CSingleton::DeleteSingleton CSingleton::del;//类外定义初始化, 格式 类型 类名::静态变量名 CSingleton* CSingleton:: m_spring(nullptr);int main() {//主函数进行测试CSingleton* p1 CSingleton::CreatCSingleton();CSingleton* p2 CSingleton::CreatCSingleton();cout p1 p2 endl;CSingleton::DestoryCSingleton(p1);return 0; }3.懒汉式和饿汉式 懒汉式当第一次调用这个接口函数时先创建单例 时间换空间的做法 饿汉式无论是否调用获取单例接口函数都会提前创建单例 空间换时间的做法 懒汉式代码就是上面的代码 饿汉式代码 //饿汉式 class CSingleton {CSingleton() {}CSingleton(const CSingleton) delete;static CSingleton sing;~CSingleton() {} public:static CSingleton* CreatCSingleton() {return sing;} };CSingleton CSingleton::sing; 4.单例模式的优点 1.单例模式提供了严格的对唯一实例的创建访问和销毁安全性高 2.单例模式的实现可以节省系统资源 二.工厂模式 1.概念 工厂模式主要用来集中创建对象的如果在任何使用的地方创建对象那就造成了类或方法之间的耦合如果要更换对象那么在所有使用到的地方都要修改一遍不利于后期的维护也违背了开闭设计原则如果使用工厂来创建对象那么就彻底解耦合了如果要修改著需要修改工厂类即可工厂模式最大的优势解耦 2.简单工厂 class CEngine { public:virtual void woring() 0; };class CEngine2L: public CEngine {void woring() {cout2.0自然吸气发动机正在工作 endl;} };class CEngine2T : public CEngine {void woring() {cout2.0涡轮增压发动机正在工作 endl;}class CCar { public:CEngine* m_engine;CCar():m_engine(new CEngine2L){}CCar(const stringtype) :m_engine(type2.0L?(CEngine*)new CEngine2L: (CEngine*)new CEngine2T) {}//这里发生了耦合void dirve() {if (m_engine) {m_engine-woring();cout 汽车正在行驶 endl;}}~CCar() {if (m_engine) {delete m_engine;m_engine nullptr;}} }; int main() {CCar tst1;CCar tst2(2.0L);tst1.dirve();tst2.dirve(); }简单工厂就是在上面代码的基础上进行解耦 耦合这里来看就是如果发动机函数增加参数的话那么汽车类中与发动机函数有交互的函数的内容也需要改就是牵一发而动全身 进行解耦代码为 class CEngine { public:virtual void woring() 0; };class CEngine2L : public CEngine {void woring() {cout 2.0自然吸气发动机正在工作 endl;} };class CEngine2T : public CEngine {void woring() {cout 2.0涡轮增压发动机正在工作 endl;} }; //创建发动机的具体代码写在这里 class CFactoryEngine { public:CEngine* CreatEngine(const string type) {if (type 2.0L) {return new CEngine2L;}else if (type 2.0T) {return new CEngine2T;}else {return nullptr;}} };class CCar { public:CEngine* m_engine;CCar() :m_engine(new CEngine2L) {}//引入简单工厂后的写法CCar(CFactoryEngine* pFac,const string type):m_engine(pFac? pFac-CreatEngine(type):nullptr){}void dirve() {if (m_engine) {m_engine-woring();cout 汽车正在行驶 endl;}}~CCar() {if (m_engine) {delete m_engine;m_engine nullptr;}} }; int main(){CFactoryEngine Fac;CCar audi(Fac, 2.0L);audi.dirve();CCar benzi(Fac, 2.0L); benzi.dirve(); }3.工厂方法 工厂方法就是在简单工厂的基础上 把工厂进行细化 每个产品对应一个工厂之前的简单工厂每有一个新产品就要将工厂的功能进行修改很麻烦工厂进行细化之后如果有新的产品我们只需要增加工厂的功能就行了 代码如下 #include iostream using namespace std;class CEngine { public:virtual void woring() 0; };class CEngine2L : public CEngine {void woring() {cout 2.0自然吸气发动机正在工作 endl;} };class CEngine2T : public CEngine {void woring() {cout 2.0涡轮增压发动机正在工作 endl;} };class CFactoryEngine { public:virtual CEngine* CreatEngine() 0; };class CFactoryEngine2L :public CFactoryEngine { public:virtual CEngine* CreatEngine() {return new CEngine2L;}};class CFactoryEngine2T :public CFactoryEngine { public:virtual CEngine* CreatEngine() {return new CEngine2T;}};class CCar { public:CEngine* m_engine;CCar() :m_engine(new CEngine2L) {}CCar(CFactoryEngine* pFac) :m_engine(pFac ? pFac-CreatEngine() : nullptr) {}void dirve() {if (m_engine) {m_engine-woring();cout 汽车正在行驶 endl;}}~CCar() {if (m_engine) {delete m_engine;m_engine nullptr;}} };int main() {CFactoryEngine* Fac2L new CFactoryEngine2L;CFactoryEngine* Fac2T new CFactoryEngine2T;CCar audi(Fac2L);audi.dirve();CCar benzi(Fac2T);benzi.dirve();return 0; }4.抽象工厂 抽象工厂就是在工厂方法的基础上将所有工厂统一管理 代码如下 #include iostream using namespace std;class CEngine { public:virtual void woring() 0; };class CEngine2L : public CEngine {void woring() {cout 2.0自然吸气发动机正在工作 endl;} };class CEngine2T : public CEngine {void woring() {cout 2.0涡轮增压发动机正在工作 endl;} };class CGearBox { public:virtual void woring() 0; };class CGearBoxAuto : public CGearBox {void woring() {cout 自动变速器正在工作 endl;} };class CGearBoxMaual : public CGearBox {void woring() {cout 手动变速器正在工作 endl;} }; //加速器 class CFactoryEngine { public:virtual CEngine* CreatEngine() 0; };class CFactoryEngine2L :public CFactoryEngine { public:virtual CEngine* CreatEngine() {return new CEngine2L;}};class CFactoryEngine2T :public CFactoryEngine { public:virtual CEngine* CreatEngine() {return new CEngine2T;}};//变速器 class CFactoryEngineGearBox { public:virtual CGearBox* CreatBox() 0; };class CFactoryEngineGearBoxAuto :public CFactoryEngineGearBox { public:virtual CGearBox* CreatBox() {return new CGearBoxAuto;}};class CFactoryEngineGearBoxMaual :public CFactoryEngineGearBox { public:virtual CGearBox* CreatBox() {return new CGearBoxMaual;}};//统一工厂 class CFactory { public:virtual CGearBox* CreatBox() 0;virtual void woring() 0; };class CFactory2TAuto :public CFactory { public:virtual CGearBox* CreatBox() {return new CGearBoxAuto;}virtual CEngine* CreatEngine() {return new CEngine2T;} };class CFactory2TMaual :public CFactory { public:virtual CGearBox* CreatBox() {return new CGearBoxMaual;}virtual CEngine* CreatEngine() {return new CEngine2T;} }; class CCar { public:CEngine* m_engine;CGearBox* m_gearbox;CCar() :m_engine(new CEngine2L) {}CCar(CFactoryEngine* pFacEngine, CFactoryEngineGearBox* pFacGearBox) :m_engine(pFacEngine ? pFacEngine-CreatEngine() : nullptr), m_gearbox(pFacGearBox ? pFacGearBox-CreatBox() : nullptr){}void dirve() {if (m_engine) {m_engine-woring();cout 汽车正在行驶 endl;}if (m_gearbox) {m_gearbox-woring();cout 变速器正在工作 endl;}}~CCar() {if (m_engine) {delete m_engine;m_engine nullptr;}if (m_gearbox) {delete m_gearbox;m_gearbox nullptr;}} };int main() {CFactoryEngine* PFa1 new CFactoryEngine2L;CFactoryEngineGearBox* PFa2 new CFactoryEngineGearBoxAuto;CCar audi(PFa1,PFa2);audi.dirve();return 0; }
http://www.dnsts.com.cn/news/35543.html

相关文章:

  • 网站开发需要多少费用供水开发建设公司网站
  • h5游戏平台搭建系统优化的影响因素
  • 中山网站建设方案免费网络电话app
  • 免费又实用的网站wordpress本地主机
  • 如何修改单页网站房产资讯最新消息
  • 皮肤自做头像的网站做网站推广有用吗
  • 外贸网站镜像3 建设营销型网站流程图
  • 北京优化网站外包公司企业网站的形式
  • 如何查询网站域名备案信息做网站论坛 前置许可
  • 网站seo优化主要有哪些手段代加工手工活外发免费 来料加工
  • 网站开发绑定qq门户网站模板html5
  • 衡阳市住房和城乡建设局网站建设银行粤通卡网站
  • 服装网站模板网站建设工作整改报告
  • 网站静态和动态深圳网站建设怎么样
  • 简单的网站建立怎么做wordpress友情链接函数
  • iis6网站域名网站网页设计培训班
  • 北京市建设工程审核在哪个网站杭州外贸网站建设公司申跃
  • 丰台青岛网站建设wordpress底部版权代码
  • 空白网站怎么做高校网站群建设
  • 如何建立网站的步骤关注公众号平台
  • 北辰做网站的公司做公司网站方案
  • 网站功能型和展示型的区别wordpress 地图html
  • 做网站设计挣钱吗网站网站代理可以做不
  • 广州商城网站制作网站建设银行网站钓鱼
  • 两学一做专题教育网站装饰公司电话
  • 找程序员做网站大连发现2例阳性
  • 网站域名的组成网站宣传的方法
  • 济南手机网站建设公司企业h5网站建设
  • 汽车网站案例网页设计枣庄建设工程管理局网站
  • 对网站建设提建议怎么看到网站开发时间