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

网站模板下载后怎么使用代刷业务网站建设

网站模板下载后怎么使用,代刷业务网站建设,优化设计三年级上册语文答案,做关于灯饰的网站五、设计模式 设计模式是在软件开发中#xff0c;经过验证的、在特定场景的解决⽅案。另⼀种说法是扩展隔离变化点#xff0c;抽象稳定点。 5.1 设计原则 1. 单⼀职责原则#xff1a;就⼀个类⽽⾔#xff0c;应该仅有⼀个引起它变化的原因。 2. 开放封闭原则#xff1…五、设计模式 设计模式是在软件开发中经过验证的、在特定场景的解决⽅案。另⼀种说法是扩展隔离变化点抽象稳定点。 5.1 设计原则 1. 单⼀职责原则就⼀个类⽽⾔应该仅有⼀个引起它变化的原因。 2. 开放封闭原则对程序的改动可以通过增加代码来完成但是不能改动现有的代码 3. ⾥⽒代换原则如果⼀个实体适⽤⼀个基类那么⼀定适⽤于其派⽣类 4. 依赖倒置原则针对接⼝编程不要针对实现编程 5. 迪⽶特原则如果⼀个类需要调⽤另⼀个类的某个⽅法的话可以通过第三个类转发这个调⽤ 6. 接⼝隔离原则每个接⼝中不应该存在派⽣类⽤不到却必须实现的⽅法否则就要将接⼝拆分 5.2 常⽤设计模式 单例模式 保证⼀个类仅有⼀个实例并提供⼀个访问它的⽅法。有饿汉模式和懒汉模式两种饿汉模式是该类定义的时候进⾏实例化且是线程安全的。 饿汉式 class Singleton {public:static Singleton *getInstance(){return instance;}private:// Singleton() default;Singleton() {}Singleton(const Singleton instance) default;Singleton operator(const Singleton instance) default;static Singleton *instance; };Singleton *Singleton::instance new Singleton(); 懒汉式 #include mutexclass Singleton {public:static Singleton *getInstance(){if (instance nullptr){mtx.lock();if (instance nullptr){instance new Singleton();}mtx.unlock();}return instance;}private:Singleton() default;Singleton(const Singleton instance) default;Singleton operator(const Singleton instance) default;static Singleton *instance;static mutex mtx; };mutex Singleton::mtx; Singleton *Singleton ::instance nullptr; 简单⼯⼚模式 主要⽤于创建对象。⽤⼀个⼯⼚来根据输⼊的条件产⽣不同的类然后依据不同类的虚函数得到不同的结果。创建对象之间⽆依赖。产品基类定义纯虚函数其派⽣类实现该虚函数。⼯⼚类定义返回产品接⼝的函数通过判断传⼊的参数确定返回产品类型。 #include bits/stdc.h using namespace std; class IProduct { public: virtual void show() 0;virtual ~Product(){}; }; class ProductA : public IProduct { public: void show() { cout ProductA.show() endl; } ~ProductA(){}; }; class ProductB : public IProduct { public: void show() { cout ProductB.show() endl; } ~ProductB(){}; }; class SimpleFactory { public: IProduct* product(const string str) { if (str productA) { return new ProductA(); } else if (str productB) { return new ProductB(); } return nullptr; } }; int main() { SimpleFactory fac; IProduct* pro; pro fac.product(productA); pro-show(); delete pro; pro fac.product(productB); pro-show(); delete pro; return 0; } 模板⽅法 定义⼀个操作中的算法框架⽽将⼀些步骤延迟到⼦类中。该⽅法使得⼦类可以不改变⼀个算法的结构即可重定义该算法的某些特定步骤。基类实现总处理步骤顺序的函数⽽每个步骤定义为虚函数。派⽣类实现所要改变某步骤的虚函数即可。          #include bits/stdc.h using namespace std; class Show { public: void show() { // 固定流程封装到这⾥ show0(); show1(); show2(); show3(); } protected: // ⼦流程 允许⼦类访问防⽌客户调⽤ virtual void show0() { cout show0 endl; } virtual void show1() { cout show1 endl; } virtual void show2() { cout show2 endl; } virtual void show3() { cout show3 endl; } }; class ShowEx: public Show { protected: virtual void show1() { cout show1 update endl; } virtual void show2() { cout show2 update endl; } }; int main() { Show* zs new ShowEx; zs-show();return 0; } 责任链模式 使多个对象都有机会处理请求从⽽避免请求的发送者和接收者之间存在耦合关系。将这些对象连成⼀条链并沿着这条链传递请求直到有个对象处理它为⽌。基类有个指向⾃⼰的指针next还有两个函数分别是定义为纯虚函数的处理函数和设置下⼀个对象的函数。派⽣类实现虚处理函数包含⾃⼰的处理逻辑、传递给下⼀个对象操作、⽆法处理对应的操作等 #include bits/stdc.h using namespace std; class IHandler { protected: IHandler *next; public: void setNextHandler(IHandler* n) { next n; } virtual bool handleRequest(string ctx) 0; }; class HandleByMainProgram: public IHandler { public: virtual bool handleRequest(string ctx) { if (ctx 1) { cout HandleByMainProgram endl; } else if (next){ next-handleRequest(ctx); } else { cout NO endl; } } }; class HandleByProjMgr: public IHandler { public: virtual bool handleRequest(string ctx) { if (ctx 2) { cout HandleByProjMgr endl; } else if (next){ next-handleRequest(ctx); } else { cout NO endl; } } }; class HandleByBoss: public IHandler { public: virtual bool handleRequest(string ctx) { if (ctx 3) { cout HandleByBoss endl; } else if (next){ next-handleRequest(ctx); } else { cout NO endl; } } }; int main() { IHandler *h1 new HandleByMainProgram(); IHandler *h2 new HandleByProjMgr(); IHandler *h3 new HandleByBoss(); h1-setNextHandler(h2); h2-setNextHandler(h3); h1-handleRequest(3);return 0; } 装饰器模式 动态地给对象增加额外的功能。就增加功能⽽⾔该模式⽐⽣成⼦类更为灵活。与责任链最⼤不同在于是否有顺序关系。 基类有⼀个指向⾃⼰的指针变量同时有⼀个原始功能函数被定义为虚函数。派⽣类实现该虚函数并通过基类指针调⽤基类的功能函数。 #include bits/stdc.h using namespace std; class CalcBonus { public: CalcBonus(CalcBonus *c nullptr): cc(c) {} virtual double calc(Context ctx) { return 0.0; } protected: CalcBonus *cc; }; class CalcMonthBonus: public CalcBonus { public: CalcMonthBonus(CalcBonus *c): CalcBonus(c) {} virtual double Calc(Context ctx) { double mbonus 0.0; return mbonus cc-calc(ctx); } }; class CalcSumBonus: public CalcBonus { public: CalcSumBonus(CalcBonus *c): CalcBonus(c) {} virtual double Calc(Context ctx) { double sbonus 0.0; return sbonus cc-calc(ctx); } }; class CalcGroupBonus: public CalcBonus { public: CalcGroupBonus(CalcBonus *c): CalcBonus(c) {} virtual double Calc(Context ctx) { double gbonus 0.0; return gbonus cc-calc(ctx); } }; int main() { // 普通员⼯ Context ctx1; CalcBonus *base new CalcBonus(); CalcBonus *cb1 new CalcMonthBonus(base); CalcBonus *cb2 new CalcSumBonus(cb1); cb2-calc(ctx1); // 部⻔经理 Context ctx2; CalcBonus *cb3 new CalcGroupBonus(cb2); cb3-calc(ctx2);return 0; } 观察者设计模式如何实现 1. 观察者设计模式的定义 指 多个对象间存在一对多的依赖关系当一个对象的状态发生改变时所有依赖于它的对象都得到 通知并被自动更新 。这种模式有时又称作发布 - 订阅模式、模型 - 视图模式它是对象行为型模式。 2. 优点 1 降低了目标与观察者之间的耦合关系 两者之间是抽象耦合关系。符合依赖倒置原则。 2 目标与观察者之间建立了一套触发机制。 3. 缺点 1 目标与观察者之间的依赖关系并没有完全解除而且有可能出 现循环引用。 2 当观察者对象很多时通知的发布会花费很多时间影响程序的效率。 4. 观察者设计模式的结构与实现 观察者模式的主要角色如下 1 抽象主题 Subject 角色也叫抽象目标类它提供了一个用于保存观察者对象的聚集类和 增加、删除观察者对象的方法以及通知所有观察者的抽象方法。 2 具体主题 Concrete Subject 角色也叫具体目标类它实现抽象目标中的通知方法当 具体主题的内部状态发生改变时通知所有注册过的观察者对象。 3 抽象观察者 Observer 角色它是一个抽象类或接口它包含了一个更新自己的抽象方 法当接到具体主题的更改通知时被调用。 4 具体观察者 Concrete Observer 角色实现抽象观察者中定义的抽象方法以便在得到 目标的更改通知时更新自身的状态。 可以举个博客订阅的例子当博主发表新文章的时候即博主状态发生了改变那些订阅的读者就会收 到通知然后进行相应的动作比如去看文章或者收藏起来。博主与读者之间存在种一对多的依赖关系。 #include iostream #include vector #include list #include memory #include algorithm using namespace std;//观察者 --用户 class Observer { public:Observer() {}virtual ~Observer() {}virtual void Update() {} };//博客 --主题 class Blog { public:Blog() {}virtual ~Blog() {}void Attach(Observer *observer){m_observers.push_back(observer);}void Remove(Observer *observer){m_observers.remove(observer);}void Notify(){listObserver *::iterator iter m_observers.begin();for (; iter ! m_observers.end(); iter){(*iter)-Update();}}virtual void SetStatus(string s){m_status s;} //设置状态virtual string GetStatus(){return m_status;} //获得状态private:listObserver * m_observers; //观察者链表protected:string m_status; //状态。 };//具体 主题 class BlogCSDN : public Blog { private:string m_name;public:BlogCSDN(string name) : m_name(name) {}~BlogCSDN() {}virtual void setStatus(string s){m_status CSDN 通知 m_name s; //具体设置状态信息}string GetStatus(){return m_status;} };//具体观察者。 class ObserverBlog : public Observer {private:string m_name;Blog *m_blog;public:ObserverBlog(string name, Blog *blog) : m_name(name), m_blog(blog) {}~ObserverBlog() {}void Update(){string status m_blog-GetStatus();cout m_name -------------------- status endl;} };//测试案例。 int main() {Blog *blog new BlogCSDN(wuzhekai1985);Observer *observer1 new ObserverBlog(tutupig, blog);blog-Attach(observer1);blog-SetStatus(Publishing Design Pattern CImplementation (15) - Observer Pattern);blog-Notify();delete blog;delete observer1;system(pause);return 0; }
http://www.sadfv.cn/news/331508/

相关文章:

  • 财政网站平台建设不足苏州网络营销推广软件运营
  • 毕设网站和系统的区别建一个多用户团购网站需要多少钱
  • 枝江市住房和城乡建设局网站展示型网站建设公司
  • 泉州网站设计哪家公司好网站 空间 是什么
  • 分享经济网站怎么建设公司网页设计需要跟设计公司洽谈的问题
  • 五矿瑞和上海建设有限公司网站网站seo外链接
  • 天津专业网站设计报价北京建筑设计院加盟
  • 网站如何更换空间app手机软件开发
  • dedecms 门户网站制作wordpress go.php
  • 建站平台是给谁用的培训网站计时怎么破
  • 上海建设网站便宜的广东响应式网站建设平台
  • 做网站在手机显示怎么很乱网站策划专员所需知识
  • 哪些网站是jsp做的服装外贸行业发展趋势
  • 哪些网站做推广效果好网站的优化外包
  • 惠州网站建设选惠州邦电脑网站转换手机网站怎么做
  • 贵州建设局网站怎么找企业做网站
  • 安卓网站开发视频大连模板网站制作公司
  • 东莞专业做淘宝网站推广重庆建站程序
  • 西樵网站建设管理咨询公司网站
  • google站长工具傻瓜式搭建网站
  • 网站建设如何选择良好的服务器网站开通告知书
  • 中国建设银行网站太慢了建设自己的网站
  • 厦门网站建设公司闽icpjcms内容管理系统
  • 网站做微信支付宝支付网站logo显示
  • 呼和浩特建设网站广东重工建设监理有限公司官方网站
  • 微信推广和网站推广哪个好南京发布最新通报
  • 简单做动画的网站好听的域名取名
  • 建立一个网站需要什么网站开发会计分录
  • 元做网站江苏省交通运输厅门户网站建设管理中心
  • 信息技术教案 建设我们的网站wordpress 管理 主题