网站自适应源码wordpress 数据采集
网站自适应源码,wordpress 数据采集,建设厅注册中心网站考试报名费缴费,东莞大朗现在有多少例工厂方法模式#xff08;Factory Method#xff09;是一种常用的创建型设计模式#xff0c;它提供了一种创建对象的最佳方式。在工厂方法模式中#xff0c;我们在创建对象时不会对客户端暴露创建逻辑#xff0c;并且是通过使用一个共同的接口来指向新创建的对象。
意图
…工厂方法模式Factory Method是一种常用的创建型设计模式它提供了一种创建对象的最佳方式。在工厂方法模式中我们在创建对象时不会对客户端暴露创建逻辑并且是通过使用一个共同的接口来指向新创建的对象。
意图
工厂方法模式的主要目的是定义一个创建对象的接口但让实现这个接口的类来决定实例化哪一个类。工厂方法让类的实例化延迟到其子类。
应用场景
当一个类不知道它所必须创建的对象的类的时候。当一个类希望由它的子类来指定它所创建的对象时。当类将创建对象的职责委托给多个帮助子类中的某一个并且你希望将哪个帮助子类是代理者这一信息局部化时。
实现
假设我们要创建一个基于C的应用程序它可以处理不同类型的文档。每种类型的文档都有不同的处理方式。这里我们可以使用工厂方法模式定义一个创建对象的接口让子类决定实例化哪一个类。文档可以是Word文档、PDF文档等。
首先我们定义一个Document接口和几个实现这个接口的具体类。
#include iostream
#include string// Document 类充当产品接口
class Document {
public:virtual void Open() 0;virtual void Close() 0;virtual ~Document() {}
};// 具体产品类WordDocument
class WordDocument : public Document {
public:void Open() override {std::cout Word Document Opened. std::endl;}void Close() override {std::cout Word Document Closed. std::endl;}
};// 具体产品类PDFDocument
class PDFDocument : public Document {
public:void Open() override {std::cout PDF Document Opened. std::endl;}void Close() override {std::cout PDF Document Closed. std::endl;}
};接下来我们定义一个Application类它有一个工厂方法CreateDocument由子类实现。
// Application 类充当创建者
class Application {
public:virtual Document* CreateDocument() 0;void NewDocument() {Document* doc CreateDocument();doc-Open();}virtual ~Application() {}
};// 具体创建者类WordApplication
class WordApplication : public Application {
public:Document* CreateDocument() override {return new WordDocument();}
};// 具体创建者类PDFApplication
class PDFApplication : public Application {
public:Document* CreateDocument() override {return new PDFDocument();}
};最后客户端代码可以这样使用
int main() {Application* app new WordApplication();app-NewDocument(); // 创建并打开Word文档delete app; // 记得释放资源app new PDFApplication();app-NewDocument(); // 创建并打开PDF文档delete app; // 记得释放资源return 0;
}总结
工厂方法模式通过定义一个创建对象的接口并让子类决定实例化哪个类来实现对象的创建这样的设计使得工厂方法模式能够解决接口选择问题同时也保持了系统的灵活性和可扩展性。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/91220.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!