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

制作网站流程图中国纪检监察报多少钱一份

制作网站流程图,中国纪检监察报多少钱一份,微网站如何做推广方案,凡科企业邮箱定义:设计模式指的是在软件开发过程中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。创建型设计模式关注对象的创建过程,提供了更灵活、可扩展的对象创建机制。结构型设计模式用于解决…

定义:设计模式指的是在软件开发过程中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。创建型设计模式关注对象的创建过程,提供了更灵活、可扩展的对象创建机制。结构型设计模式用于解决对象之间组合成更大结构的问题,以便更好地管理它们之间的关系

前提:具体需求有稳定点也有变化点,希望将来能够修改少量代码就能适应需求的变化

基础:继承、封装、多态

模版方法:

定义:定义了一个算法的骨架,将算法中的某些步骤延迟到子类中实现

人话:算法子流程是固定的,但是子流程的执行顺序可能会发生变化,因此可以使用继承,在继承基类方法的同时实现一些函数,这些函数的子流程执行顺序是不同的。在程序执行的时候通过晚绑定实例化子类。子类要满足里氏替换原则,就是子类可以完美替代父类。demo program:

#include <iostream>
using namespace std;// 开闭
class ZooShow {
public:void Show() {// 如果子表演流程没有超时的话,进行一个中场游戏环节;如果超时,直接进入下一个子表演流程if (Show0())PlayGame();Show1();Show2();Show3();}private:void PlayGame() {cout << "after Show0, then play game" << endl;}bool expired;// 对其他用户关闭,但是子类开放的
protected:virtual bool Show0() {cout << "show0" << endl;if (! expired) {return true;}return false;}virtual void Show2() {cout << "show2" << endl;}virtual void Show1() {}virtual void Show3() {}
};// 框架
// 模板方法模式
class ZooShowEx10 : public ZooShow {
protected:virtual void Show0() {if (! expired) {return true;}return false;}
}class ZooShowEx1 : public ZooShow {
protected:virtual bool Show0() {cout << "ZooShowEx1 show0" << endl;if (! expired) { // 里氏替换return true;}return false;}virtual void Show2(){cout << "show3" << endl;}
};class ZooShowEx2 : public ZooShow {
protected:virtual void Show1(){cout << "show1" << endl;}virtual void Show2(){cout << "show3" << endl;}
};class ZooShowEx3 : public ZooShow {
protected:virtual void Show1(){cout << "show1" << endl;}virtual void Show3(){cout << "show3" << endl;}virtual void Show4() {//}
};
/*
*/
int main () {ZooShow *zs = new ZooShowEx10; // 晚绑定还是早绑定// ZooShow *zs1 = new ZooShowEx1;// ZooShow *zs2 = new ZooShowEx2;zs->Show();return 0;
}

观察者模式:

定义:用于定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,其所有依赖者(观察者)都会收到通知并自动更新。

人话:定义一个控制类,把所有实例化的对象全部存储到这个类的容器(也可以使用其他类型的数据结构)中,需要更新的时候遍历所有对象修改数据。优点是无需修改依赖和被依赖的对象,缺点是观察者过多影响性能。

代码实例:

#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
//
class IDisplay {
public:virtual void Show(float temperature) = 0;virtual ~IDisplay() {}
};class DisplayA : public IDisplay {
public:virtual void Show(float temperature) {cout << "DisplayA Show" << endl;}
private:void jianyi();
};class DisplayB : public IDisplay{
public:virtual void Show(float temperature) {cout << "DisplayB Show" << endl;}
};class DisplayC : public IDisplay{
public:virtual void Show(float temperature) {cout << "DisplayC Show" << endl;}
};class DisplayD : public IDisplay{
public:virtual void Show(float temperature) {cout << "DisplayC Show" << endl;}
};class WeatherData {
};// 应对稳定点,抽象
// 应对变化点,扩展(继承和组合)
class DataCenter {
public:void Attach(IDisplay * ob) {//}void Detach(IDisplay * ob) {//}void Notify() {float temper = CalcTemperature();for (auto &ob : obs) {ob->Show(temper);}}// 接口隔离
private:WeatherData * GetWeatherData();float CalcTemperature() {WeatherData * data = GetWeatherData();// ...float temper/* = */;return temper;}std::list<IDisplay*> obs;
};int main() {// 单例模式DataCenter *center = new DataCenter;// ... 某个模块IDisplay *da = new DisplayA();center->Attach(da);// ...IDisplay *db = new DisplayB();center->Attach(db);IDisplay *dc = new DisplayC();center->Attach(dc);center->Notify();//-----center->Detach(db);center->Notify();center->Notify();return 0;
}

 策略模式:

定义:提供一系列可以重用的算法,使得程序在运行时可以方便的切换。

人话:固定的部分抽象成基类,子类继承基类并且重写基类的虚函数,程序调用的时候根据传入的实例化的类来执行函数。是一种比较好的去处if-else的方法。

例子:

class Context {};// 稳定点:抽象去解决它
// 变化点:扩展(继承和组合)去解决它
class ProStategy {
public:virtual double CalcPro(const Context &ctx) = 0;virtual ~ProStategy(); 
};
// cpp
class VAC_Spring : public ProStategy {
public:virtual double CalcPro(const Context &ctx){}
};class VAC_Spring_v2 : public VAC_Spring {
public:virtual double CalcPro(const Context &ctx){//....}
};class VAC_worker : public ProStategy {
public:virtual double CalcPro(const Context &ctx){}
};// cpp
class VAC_QiXi : public ProStategy {
public:virtual double CalcPro(const Context &ctx){}
};
class VAC_QiXi1  : public VAC_QiXi {
public:virtual double CalcPro(const Context &ctx){}
};
// cpp
class VAC_Wuyi : public ProStategy {
public:virtual double CalcPro(const Context &ctx){}
};
// cpp
class VAC_GuoQing : public ProStategy {
public:virtual double CalcPro(const Context &ctx){}
};
class VAC_GuoQing2 : public VAC_GuoQing {
public:virtual double CalcPro(const Context &ctx){}
};class VAC_Shengdan : public ProStategy {
public:virtual double CalcPro(const Context &ctx){}
};// 设计原则:接口隔离原则
// 组合、继承
// 组合基类指针
// 两种方法:1. 采用具体接口选择算法  2. 依赖注入
class Promotion {
public:Promotion(ProStategy *sss = nullptr) : s(sss){}~Promotion(){}void Choose(ProStategy *sss) {// 条件选择if (sss != nullptr) {s = sss;}}double CalcPromotion(const Context &ctx){if (s != nullptr) {return s->CalcPro(ctx);}return 0.0L;}
private:ProStategy *s;
};int main () {Context ctx;ProStategy *s = new VAC_QiXi1();Promotion *p = new Promotion(s);p->Choose(new VAC_GuoQing2());p->CalcPromotion(ctx);return 0;
}

这是一条吃饭博客,由挨踢零声赞助。学C/C++就找挨踢零声,加入挨踢零声,面试不挨踢!

http://www.yayakq.cn/news/672605/

相关文章:

  • 珠海做网站报价公司网站建设必要性
  • 国土局网站建设情况苏州网站建设托管
  • 网站维护一般都是维护什么做网站头文件
  • wordpress homepage安卓优化大师旧版本下载
  • 静态网页模板免费下载的网站seo优化服务商
  • 摄影摄像网站建设大学生html网页设计个人博客模板
  • 专做畜牧招聘网站的ps网页版在线制作
  • 镇江做网站公司dyndns如何申请免费域名
  • 重庆手机版建站系统哪家好app设计报价
  • 重庆网站推广外包如何做网站展示商品
  • 网站建设焦作深圳设计装修公司
  • 杭州企业建设网站企业嵌入式对学历要求高吗
  • 有专业设计网站吗新冠最新消息实时动态
  • 家装设计网站开发西安mg动画制作网站建设
  • 一个服务器多个网站好吗平台期
  • 全球搜 建设网站怎么在静态网站基础上加动态
  • 长沙有什么做试卷的网站企业主页包含
  • 2345游戏大厅北京推广优化经理
  • 个人网站设计论文前言js网站模板怎么用
  • 网站域名和服务器到期wordpress原创企业主题
  • wordpress网站百度数据收录优美图片找不到了
  • 微信公众号开发需要多少钱关键词优化提升排名
  • 如何检测网站的打开速度软件开发者路线图
  • 度娘网站灯笼要咋做呢紫金网站建设公司
  • 宿松网站建设公司网站生成二维码
  • 管理网站怎么做的网站建设东营
  • 怎样安装网站模板杭州棋牌软件开发公司
  • 西安微信商城网站开发网站开发命名规范
  • 中国建设银行网站查询密码公司网站建设定金计入什么科目
  • 做网站界面用什么软件济南建设主管部门网站