V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fyyz
V2EX  ›  程序员

为什么设计模式里抽象工厂只负责创建而不负责资源管理?

  •  
  •   fyyz · 2020-04-02 13:08:40 +08:00 · 1543 次点击
    这是一个创建于 1707 天前的主题,其中的信息可能已经有所发展或是发生改变。

    抽象工厂只是实现了 CRUD 中的 C,我想实现这样的工厂:

    /* C++ */
    
    class abstract_factory
    {
    };
    
    template<typename T>
    class factory:public abstract_factory
    {
    public:
    	std::weak_ptr<T> create();
    	std::weak_ptr<T> retrieve(const std::uint64_t& product_id);
    	void destroy(const std::uint64_t& product_id);
    
    private:
    	std::uint64_t increment_serial_id_ = 0;
    	std::map<std::uint32_t, std::shared_ptr<T> products_;
    
    	std::uint64_t generate_id();
    };
    

    这种写法直接包含了 CRUD,同时内部也持有了对象。我觉得这种写法明显比只有 create() 的抽象工厂更好啊。为什么很少有人写这种模式呢?

    5 条回复    2020-04-02 16:23:13 +08:00
    binux
        1
    binux  
       2020-04-02 13:10:54 +08:00
    你不还是要显式 destroy ?
    fyyz
        2
    fyyz  
    OP
       2020-04-02 13:23:12 +08:00
    @binux 显示删除,不就是 CRUD 的 D 吗?
    binux
        3
    binux  
       2020-04-02 13:28:28 +08:00
    @fyyz 我是说你都显式 destroy 了还要工厂管理什么资源?难道构建出来的实例自己不知道什么删除自己吗?
    fyyz
        4
    fyyz  
    OP
       2020-04-02 13:55:22 +08:00
    明白了,原来这个是享元模式
    TransAM
        5
    TransAM  
       2020-04-02 16:23:13 +08:00 via Android   ❤️ 1
    所以它叫工厂,而不是容器 /对象池。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1144 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:46 · PVG 02:46 · LAX 10:46 · JFK 13:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.