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

建自己的网站用多少钱什么网站做的最好

建自己的网站用多少钱,什么网站做的最好,自己做网站有什么意义,出口网站有哪些外观模式应该是用的很多的一种模式#xff0c;特别是当一个系统很复杂时#xff0c;系统提供给客户的是一个简单的对外接口#xff0c;而把里面复杂的结构都封装了起来。客户只需使用这些简单接口就能使用这个系统#xff0c;而不需要关注内部复杂的结构。DP一书的定义特别是当一个系统很复杂时系统提供给客户的是一个简单的对外接口而把里面复杂的结构都封装了起来。客户只需使用这些简单接口就能使用这个系统而不需要关注内部复杂的结构。DP一书的定义为子系统中的一组接口提供一个一致的界面 外观模式定义了一个高层接口这个接口使得这一子系统更加容易使用。举个编译器的例子假设编译一个程序需要经过四个步骤词法分析、语法分析、中间代码生成、机器码生成。学过编译都知道每一步都很复杂。对于编译器这个系统就可以使用外观模式。可以定义一个高层接口比如名为Compiler的类里面有一个名为Run的函数。客户只需调用这个函数就可以编译程序至于Run函数内部的具体操作客户无需知道。下面给出UML图以编译器为实例。 相应的代码实现为 [cpp] view plaincopyprint? class Scanner   {   public:       void Scan() { cout词法分析endl; }   };   class Parser   {   public:       void Parse() { cout语法分析endl; }   };   class GenMidCode   {   public:       void GenCode() { cout产生中间代码endl; }   };   class GenMachineCode   {   public:       void GenCode() { cout产生机器码endl;}   };   //高层接口   class Compiler   {   public:       void Run()        {           Scanner scanner;           Parser parser;           GenMidCode genMidCode;           GenMachineCode genMacCode;           scanner.Scan();           parser.Parse();           genMidCode.GenCode();           genMacCode.GenCode();       }   };   客户使用方式 [cpp] view plaincopyprint? int main()   {       Compiler compiler;       compiler.Run();       return 0;   }   这就是外观模式它有几个特点摘自DP一书1它对客户屏蔽子系统组件因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。2它实现了子系统与客户之间的松耦合关系而子系统内部的功能组件往往是紧耦合的。3如果应用需要它并不限制它们使用子系统类。 结合上面编译器这个例子进一步说明。对于1编译器类对客户屏蔽了子系统组件客户只需处理编译器的对象就可以方便的使用子系统。对于2子系统的变化不会影响到客户的使用体现了子系统与客户的松耦合关系。对于3如果客户希望使用词法分析器只需定义词法分析的类对象即可并不受到限制。 外观模式在构建大型系统时非常有用。接下来介绍另一种模式称为组合模式。感觉有点像外观模式刚才我们实现外观模式时在Compiler这个类中包含了多个类的对象就像把这些类组合在了一起。组合模式是不是这个意思有点相似其实不然。 DP书上给出的定义将对象组合成树形结构以表示“部分-整体”的层次结构。组合使得用户对单个对象和组合对象的使用具有一致性。注意两个字“树形”。这种树形结构在现实生活中随处可见比如一个集团公司它有一个母公司下设很多家子公司。不管是母公司还是子公司都有各自直属的财务部、人力资源部、销售部等。对于母公司来说不论是子公司还是直属的财务部、人力资源部都是它的部门。整个公司的部门拓扑图就是一个树形结构。 下面给出组合模式的UML图。从图中可以看到FinanceDepartment、HRDepartment两个类作为叶结点因此没有定义添加函数。而ConcreteCompany类可以作为中间结点所以可以有添加函数。那么怎么添加呢这个类中定义了一个链表用来放添加的元素。 相应的代码实现为 [cpp] view plaincopyprint? class Company     {   public:       Company(string name) { m_name  name; }       virtual ~Company(){}       virtual void Add(Company *pCom){}       virtual void Show(int depth) {}   protected:       string m_name;   };   //具体公司   class ConcreteCompany : public Company     {   public:       ConcreteCompany(string name): Company(name) {}       virtual ~ConcreteCompany() {}       void Add(Company *pCom) { m_listCompany.push_back(pCom); } //位于树的中间可以增加子树       void Show(int depth)       {           for(int i  0;i  depth; i)               cout-;           coutm_nameendl;           listCompany *::iterator iterm_listCompany.begin();           for(; iter ! m_listCompany.end(); iter) //显示下层结点               (*iter)-Show(depth  2);       }   private:       listCompany * m_listCompany;   };   //具体的部门财务部   class FinanceDepartment : public Company    {   public:       FinanceDepartment(string name):Company(name){}       virtual ~FinanceDepartment() {}       virtual void Show(int depth) //只需显示无限添加函数因为已是叶结点       {           for(int i  0; i  depth; i)               cout-;           coutm_nameendl;       }   };   //具体的部门人力资源部   class HRDepartment :public Company     {   public:       HRDepartment(string name):Company(name){}       virtual ~HRDepartment() {}       virtual void Show(int depth) //只需显示无限添加函数因为已是叶结点       {           for(int i  0; i  depth; i)               cout-;           coutm_nameendl;       }   };   客户使用方式 [cpp] view plaincopyprint? int main()   {       Company *root  new ConcreteCompany(总公司);       Company *leaf1new FinanceDepartment(财务部);       Company *leaf2new HRDepartment(人力资源部);       root-Add(leaf1);       root-Add(leaf2);          //分公司A       Company *mid1  new ConcreteCompany(分公司A);       Company *leaf3new FinanceDepartment(财务部);       Company *leaf4new HRDepartment(人力资源部);       mid1-Add(leaf3);       mid1-Add(leaf4);       root-Add(mid1);       //分公司B       Company *mid2new ConcreteCompany(分公司B);       FinanceDepartment *leaf5new FinanceDepartment(财务部);       HRDepartment *leaf6new HRDepartment(人力资源部);       mid2-Add(leaf5);       mid2-Add(leaf6);       root-Add(mid2);       root-Show(0);          delete leaf1; delete leaf2;       delete leaf3; delete leaf4;       delete leaf5; delete leaf6;        delete mid1; delete mid2;       delete root;       return 0;   }   上面的实现方式有缺点就是内存的释放不好需要客户自己动手非常不方便。有待改进比较好的做法是让ConcreteCompany类来释放。因为所有的指针都是存在ConcreteCompany类的链表中。C的麻烦没有垃圾回收机制。 本人享有博客文章的版权转载请标明出处 http://blog.csdn.net/wuzhekai1985
http://wiki.neutronadmin.com/news/44985/

相关文章:

  • 网站建设公司的市场定位网站建设与维护期末考试题
  • 免费网站设计工具甘肃崇信县门户网站
  • 网站建设太金手指六六二九本地电商平台有哪些
  • 网站建站网站299266co制作网站
  • 抚州建设网站欧洲站vat激活
  • 2021免费正能量网站入口me域名免费注册
  • 厦门有什么好企业网站北京网站排名优化
  • 建设网站的网站公司wordpress 在线阅读pdf
  • 网站导航栏下面的文章腾讯云网站免费建设
  • 个人备案网站做电影站威海住房和城乡建设局官方网站
  • 杭州网站设计 网站百度推广开户渠道
  • 上海网站建设 知名觉wordpress shift+enter
  • 公司网站主页怎么做安卓app快速开发
  • 只买域名怎么做网站毕设什么类型网站容易做
  • 网站建设色织梦rss转wordpress
  • 自助建站网站建设设计公司网站内链建设方法
  • 制作微信网页的网站小叮当网站建设
  • 云一网站公司网站 源文件
  • 朋友做网站网站挣了好多钱什么是网络营销?
  • 网站排名优化原理模板网站如何引擎收录
  • 工商局网站怎么做增项婚庆公司网页设计模板
  • 如何找回网站备案密码深圳网站建设哪家比较好
  • 宜和购物电视购物官方网站wordpress微信登录
  • 网站一级导航怎么做门户网站建设方案的公司
  • 无锡网站排名公司网站建设论文参考文献
  • 陕西seo优化安卓优化大师官方版本下载
  • 怎么在百度搜索自己的网站免费域名申请网站大全下载
  • 网站上线要多久wordpress 小程序投稿
  • 中国建设银行个人网站登录wordpress drupal joomla
  • 北京免费建站模板品牌网上做推广