当前位置: 首页 > 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.w-s-a.com/news/572486/

相关文章:

  • 网站建设借鉴做外贸球衣用什么网站
  • 网站建设的前途微信公众号制作网站
  • 做网站之前要安装什么网站改进建议有哪些
  • 网站建设+管理系统开发山东专业网站建设公司
  • 基础微网站开发咨询中国印花图案设计网站
  • 找最新游戏做视频网站天津市招标投标公共服务平台
  • 电影订票网站怎么做注册地址出租多少钱
  • 做网站的规划和设想怎样做能让招聘网站记住密码
  • 建站知乎网站公告建设方案
  • 济南市住房和城乡建设局官方网站淮阳住房和城乡建设网站
  • 网站的设计特点有哪些seo推广要多少钱
  • wordpress开通多站点好处软件开发外包公司的设计一般多少钱
  • 为什么我的网站做不起来微信网页版登录手机版下载
  • 苏州市建设职业中心网站北京网站优化方法
  • 于飞网站开发溧阳 招网站开发
  • 网站中的宣传册翻页动画怎么做长沙有哪些网络平台公司
  • 如何做视频门户网站网站建设模板ppt
  • 青岛黄岛区网站开发百度云盘登录入口
  • 建设银行甘肃省行网站房地产市场调研报告
  • js 网站制作合肥公司网站建设
  • 最好建网站系统的软件wordpress调用模版
  • 个人网站备案地址阿里云增加网站
  • 自己做网站要办手续吗重庆短视频制作公司排名
  • 哪个全球购网站做的好汉中门户网官网
  • 网站建设有哪几种wordpress 项目选项
  • 成都网站建设开发公司哪家好验证码插件 wordpress
  • 企业网站设计要点泰州市网站制作公司
  • 网站用户运营北京官方网站怎么做
  • 农业门户网站开发做首图的网站
  • wordpress 素材站模板怎么制作网站程序