[boolan]设计模式学习二

    xiaoxiao2021-03-30  29

    1.工厂模式和抽象工厂:

            貌似是为了避免静态的new,以后扩展时代码修改的比较少,还有就是用户在构造对象时避免准备复杂的参数,使用工厂模式可以让代码在运行时决定具体构造对象的类型。

    因此除了不同种类的需要有个抽象基类以外,工厂也要有个抽象的基类工厂,全部依赖于抽象。

    class MainForm : public Form { SplitterFactory* factory;//工厂 public: MainForm(SplitterFactory* factory){ this->factory=factory; } void Button1_Click(){ ISplitter * splitter= factory->CreateSplitter(); //多态new splitter->split(); } };         抽象工厂的不同之处就在于把一系列有关联的类塞到一起构造,防止一些逻辑上的问题。

            知乎上一篇文章:https://www.zhihu.com/question/24843188?sort=created

    2.享元模式:

            如果程序中要使用大量细粒度的对象,但是其中又有很多内容相同的东西,这时候为了节省内存开销,可以是使用享元模式,感觉主要目的类似于smartpoint的计数器,也是为了节省空间,不过为了达到同样的目的,享元模式的实现手段有很多。课程里介绍的是使用map,这样的话相同的key会返回同一个对象内容,如果key不存在再新建。

    class Font { private: //unique object key string key; //object state //.... public: Font(const string& key){ //... } }; ß class FontFactory{ private: map<string,Font* > fontPool; public: Font* GetFont(const string& key){ map<string,Font*>::iterator item=fontPool.find(key); if(item!=footPool.end()){ return fontPool[key]; } else{ Font* font = new Font(key); fontPool[key]= font; return font; } } void clear(){ //... } };        不过说实话感觉还是需要一个key去辅助,和想象的有点不一样,但是享元的做法,要节省空间的话,必须要话费额外的时间去存取和控制,也是没办法的吧

    转载请注明原文地址: https://ju.6miu.com/read-665233.html

    最新回复(0)