C 工廠模式

2022-08-22 18:18:09 字數 1944 閱讀 6836

1. 簡單工廠模式

#include using namespace std;

class shoes

virtual void show() = 0;

};class liningshoes : public shoes

};class adidasshoes : public shoes

};enum shoes_type

;class shoesfactory

}};int main()

shoes* padidasshoes = shoesfactory.createshoes(adidas);

if (padidasshoes != null)

}

2. 工廠方法模式
#include using namespace std;

// 抽象基類,只提供乙個介面規範

class shoes

virtual void show() = 0; // 介面規範

};class liningshoes : public shoes

};class adidasshoes : public shoes

};// 抽象基類,只提供乙個工廠類的介面規範

class shoesfactory

};class liningproducer : public shoesfactory

};class adidasproducer : public shoesfactory

};int main()

3. 模板工廠
#include using namespace std;

class shoes

virtual void show() = 0;

};class liningshoes : public shoes

};class adidasshoes : public shoes

};template class concretefactory

};int main()

4. 自動註冊工廠
#include #include #include #include using namespace std;

class shoes

virtual void show() = 0;

};class liningshoes : public shoes

};class adidasshoes : public shoes

void show()

};struct factory

); }

templateregister_t(string key, args... args));}

};static shoes* produce(string key)

private:

factory() {};

factory(const factory&) = delete;

factory(factory&&) = delete;

static factory& get() // 單例工廠

static map> map_;

};map> factory::map_; // 不要忘記初始化私有static

// 以下##__va_args__表示可省略可變引數巨集

#define register(t, key, ...) static factory::register_treg_msg_##t##_(key, ##__va_args__)

// 以下為註冊

register(liningshoes, "liningshoes");

register(adidasshoes, "adidasshoes", 3);

int main()

工廠模式 (C )

1 uml設計圖 2 核心實現 public static insurancefactorygetinsurancefactory string type else if type.equals 汽車損壞 else if type.equals 財產安全 else if type.equals 人員...

C 工廠模式

本文參考1 本文參考2 軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參...

c 工廠模式

將乙個複雜的物件的構建和其部件分離,將耦合度降到最低。換句話說,就是當初始化乙個物件需要很多步驟 複雜工作時,不要使用new來建立物件,而是通過工廠模式抽象出來專門生成物件的一種方法。量會增加,但耦合度降低 維護方便。工廠模式設計思路 工廠類負責對產品類的建立,即產品類不能直接例項,不能new,產品...