zoukankan      html  css  js  c++  java
  • 享元模式

    【1】什么是享元模式?

    享元模式:

    【2】享元模式的代码示例:

    代码示例1:

     1 #include <iostream>
     2 #include <string>
     3 #include <map>
     4 using namespace std;
     5 
     6 class Flyweight
     7 {
     8 public:
     9     virtual void operation(int) = 0;
    10 };
    11 
    12 class ConcreteFlyweight : public Flyweight
    13 {
    14     void operation(int extrinsicState)
    15     {
    16         cout << "具体FlyWeight: " << extrinsicState << endl;
    17     }
    18 };
    19 
    20 class UnsharedConcreteFlyweight : public Flyweight
    21 {
    22     void operation(int extrinsicState)
    23     {
    24         cout << "不共享的具体FlyWeight: " << extrinsicState << endl;        
    25     }
    26 };
    27 
    28 class FlyweightFactory
    29 {
    30 private:
    31     map<string,Flyweight*> flyweights;
    32 public:
    33     FlyweightFactory()
    34     {
    35         flyweights["X"] = new ConcreteFlyweight();
    36         flyweights["Y"] = new ConcreteFlyweight();
    37         flyweights["Z"] = new UnsharedConcreteFlyweight();
    38     }
    39     Flyweight *getFlyweight(string key)
    40     {
    41         return (Flyweight *)flyweights[key];
    42     }
    43 };
    44 
    45 int main()
    46 {
    47     int state = 22;
    48     FlyweightFactory *f = new FlyweightFactory();
    49     
    50     Flyweight *fx = f->getFlyweight("X");
    51     fx->operation(--state);
    52     
    53     Flyweight *fy = f->getFlyweight("Y");
    54     fy->operation(--state);
    55 
    56     Flyweight *fz = f->getFlyweight("Z");
    57     fz->operation(--state);
    58 
    59     Flyweight *uf = new UnsharedConcreteFlyweight();
    60     uf->operation(--state);
    61 
    62     return 0;
    63 }
    64 //Result:
    65 /*
    66 具体FlyWeight: 21
    67 具体FlyWeight: 20
    68 不共享的具体FlyWeight: 19
    69 不共享的具体FlyWeight: 18
    70 */
    View Code

    代码示例2:

     1 #include <iostream>
     2 #include <list>
     3 #include <string>
     4 #include <map>
     5 using namespace std;
     6 
     7 class WebSite
     8 {
     9 public:
    10     virtual void use() = 0;
    11 }; 
    12 
    13 class ConcreteWebSite : public WebSite
    14 {
    15 private:
    16     string name;
    17 public:
    18     ConcreteWebSite(string name)
    19     {
    20         this->name = name;
    21     }
    22     void use()
    23     {
    24         cout << "网站分类: " << name << endl;
    25     }
    26 };
    27 
    28 class WebSiteFactory
    29 {
    30 private:
    31     map<string,WebSite*> wf;
    32 public:
    33      
    34     WebSite *getWebSiteCategory(string key)
    35     {
    36         if (wf.find(key) == wf.end())
    37         {
    38             wf[key] = new ConcreteWebSite(key);
    39         }    
    40         return wf[key];
    41     }
    42      
    43     int getWebSiteCount()
    44     {
    45         return wf.size();
    46     }
    47 };
    48 
    49 int main()
    50 {
    51     WebSiteFactory *wf = new WebSiteFactory();
    52 
    53     WebSite *fx = wf->getWebSiteCategory("good");
    54     fx->use();
    55     
    56      WebSite *fy = wf->getWebSiteCategory("产品展示");
    57     fy->use();
    58 
    59     WebSite *fz = wf->getWebSiteCategory("产品展示");
    60     fz->use();
    61 
    62 
    63     WebSite *f1 = wf->getWebSiteCategory("博客");
    64     f1->use();
    65 
    66     WebSite *f2 = wf->getWebSiteCategory("微博");
    67     f2->use();
    68 
    69     cout << wf->getWebSiteCount() << endl;
    70     return 0;
    71 }
    72 //Result:
    73 /*
    74 网站分类: good
    75 网站分类: 产品展示
    76 网站分类: 产品展示
    77 网站分类: 博客
    78 网站分类: 微博
    79 4
    80 */
    View Code

     

    Good   Good   Study, Day  Day  Up.

    顺序  选择  循环  总结

  • 相关阅读:
    I-string_2019牛客暑期多校训练营(第四场)
    hackerrank Palindromic Border
    hackerrank Circular Palindromes
    uoj424
    bzoj5384
    uoj450
    QTP 表格的导入导出异常信息 笔记
    QTP基本循环异常遍历(代码方式实现)
    QTP基本循环正常遍历(代码方式实现)
    《大道至简》读后感
  • 原文地址:https://www.cnblogs.com/Braveliu/p/3956948.html
Copyright © 2011-2022 走看看