网站开发的,朝阳建设网站,南宁seo,电子商务网站开发实训总结工厂方法
以图书馆管理系统为例#xff0c;需要API提供查询不同专业分类的书目列表#xff0c;一般实现#xff0c;
class LibraryManager {
public:LibraryManager() {}//按专业分类查询BookList Query(Type type) {if(type TA) {return ...;} else if (type TB) {} el…工厂方法
以图书馆管理系统为例需要API提供查询不同专业分类的书目列表一般实现
class LibraryManager {
public:LibraryManager() {}//按专业分类查询BookList Query(Type type) {if(type TA) {return ...;} else if (type TB) {} else if (...) {//...} else {return type_null;} }
};可以把构建返回对象提取到工厂类
class BookFactory {
public:Booklist CreateBooklist(Type type) {if(type TA) {return ...;} else if (type TB) {} else if (...) {//...} else {return type_null;} }
};
class LibraryManager {
public:LibraryManager(BookFactory factory) {this.factory_ factory;}BookList Query(Type type) {return this.factory.CreateBooklist(type);}
private:this.factory_;
};现在增加一个需求增加文学书籍类专业类、文学类都要支持按语种检索工厂模式便于对新增需求的扩展
class BookFactory {
public: virtual Booklist CreateBooklist(Type type) 0;
}
class LanguageBookFactory: public BookFactory {
public: Booklist CreateBooklist(Type type) {//}
};
class ProfessionalBookFactory: public BookFactory {
public: Booklist CreateBooklist(Type type) {//}
};抽象工厂方法
另一个场景读者查、借还书都需要管理系统从数据库查询书籍、读者账户系统同时考虑系统未来用不同的第三方数据库如何设计呢
class LibraryManager {
public:void QueryDB() {if(config_.db_type MYSQL) {//具体实现} else if(config_.db_type SQLLITE) {...} else {...} }
private:
Config config_;
};用统一的工厂接口提供获取数据的功能
class DataFactory {
public:virtual ReaderInfo RetriveReaderInfo() 0;virtual BookInfo RetriveBookInfo() 0;
};
class DataFactoryMysql: public DataFactory {
//具体实现
}
class DataFactorySqllite: public DataFactory {
//具体实现
}
class LibraryManager {
public:void QueryDB() {if(config_.db_type MYSQL) {auto mysql std::make_sharedDataFactoryMysql();mysql-RetriveReaderInfo();} else if(config_.db_type SQLLITE) {...} else {...} }