爲了替換單例模式和一般的「資源管理器」,我提供了一個解決方案。使資源靜止並受到保護。該資源由繼承類的所有孩子共享。它很有用,但我不確定這是不是一個好的方法。 下面是一些代碼來表達我在做什麼(這裏的資源是SF ::紋理):通過繼承共享的靜態受保護資源
class Foo {
public:
Foo() {
if(m_texture == nullptr) {
//Création et chargement de la texture
m_texture = std::unique_ptr<sf::Texture>(new sf::Texture());
m_texture->loadFromFile("...");
}
}
void draw(sf::RenderWindow& window) = 0;
protected:
static std::unique_ptr<sf::Texture> m_texture = nullptr;
};
class Bar : public Foo {
public:
Bar()
: m_sprite(*m_texture) {}
void draw(sf::RenderWindow& window) {
window.draw(m_sprite);
}
private:
sf::Sprite m_sprite;
};
這樣,我的資源是通過所有的孩子共享,並且只初始化一次。 這是一個很好的解決方案,可以替換我將通過引用隨處攜帶的單例或資源管理器。 謝謝!
我自己喜歡這個想法,並且是谷歌搜索,看看你是否得到了我懷疑的性能增益。每次我看到一種模式,我都會看到一種間接成本。這似乎是清除單身人士臭味的一種方法。
這將類元數據放在類的內部。我會進一步說,如果您正在尋找對象創建的性能和靈活性,那麼對其他模式進行這樣的設計也是一個很好的設計,將其他工廠添加爲靜態函數以支持具有不同接口的其他模式。
通過外化獲得什麼好處? –