C++ 工厂方法设计模式的学习 (Boolan学习笔记第12周)
来源:互联网 发布:软件编程软件 编辑:程序博客网 时间:2024/06/05 17:00
这周学习了几种设计模式,发现4种设计模式
Factory Method
Abstract Factory
Protytype
Builder
其实是很相似的。它们都是定义一个用于创建对象的接口,让子类来决定实例化哪一个类,从而使得一个类的实例化延迟,这样,就可以避免new过程中所导致的依赖具体类的紧耦合。
首先来看Factory Method设计模式,GOF里面的原话是:
**Define an interface for creating an object, but let subclasses decide which class to instantiate.
Factory Method lets a class defer instantiation to subclasses.**
翻译成中文就是“定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的实例化延迟到其子类。”。
结构图如下:
上面的Creator就是抽象工厂, ConcreteCreator就是具体工厂。Product是抽象产品,它定义了工厂方法创建的对象的接口。ConcreteProduct是具体产品,它实现了Product接口。
说简单一点就是:抽象工厂是与客户端的接口,这样客户就不需要知道具体工厂的细节。具体工厂负责生产具体产品,里面就负责具体产品的业务逻辑怎么实现。抽象产品是具体产品的父类或实现的接口。
打个比方:苹果公司是一个抽象工厂,我们必须要制定具体的工厂才能生成具体的产品,象IPhone6, IPhone6S, IPhone7 每一个就是一个具体产品,其对应一个具体工厂。
一个按工厂方法设计模式的文件分割器的伪代码实现如下。它模拟了二进制分割,文本分割,图像分割和视频分割等不同业务的实现。
//抽象类class ISplitter{public: virtual void split()=0; virtual ~ISplitter(){}};//工厂基类class SplitterFactory{public: virtual ISplitter* CreateSplitter()=0; virtual ~SplitterFactory(){}};//具体类class BinarySplitter : public ISplitter{};class TxtSplitter: public ISplitter{};class PictureSplitter: public ISplitter{};class VideoSplitter: public ISplitter{};//具体工厂class BinarySplitterFactory: public SplitterFactory{public: virtual ISplitter* CreateSplitter(){ return new BinarySplitter(); }};class TxtSplitterFactory: public SplitterFactory{public: virtual ISplitter* CreateSplitter(){ return new TxtSplitter(); }};class PictureSplitterFactory: public SplitterFactory{public: virtual ISplitter* CreateSplitter(){ return new PictureSplitter(); }};class VideoSplitterFactory: public SplitterFactory{public: virtual ISplitter* CreateSplitter(){ return new VideoSplitter(); }};{ SplitterFactory* factory;//工厂public: MainForm(SplitterFactory* factory){ this->factory=factory; } void Button1_Click(){ ISplitter * splitter= factory->CreateSplitter(); //多态new splitter->split(); }};
上面的代码中,每种业务都有一个具体类/具体工厂。在MainFrame中,其具体工厂的参数会引入,这样,当用户点击button时就会生成相应的产品。这样做的好处就是MainFrame里面再也不需要根据具体的产品来调用一堆if…else代码,非常简洁。
- C++ 工厂方法设计模式的学习 (Boolan学习笔记第12周)
- C++ Observer设计模式的学习 (Boolan学习笔记第11周)
- C++ Iterator设计模式的思考 (Boolan学习笔记第13周)
- [boolan]设计模式的学习
- 【设计模式】工厂方法模式学习笔记
- 设计模式学习笔记-工厂方法模式
- 设计模式学习笔记--工厂方法模式
- 设计模式学习笔记-工厂方法模式
- [boolan]设计模式学习二
- [boolan]设计模式 观察者学习
- 设计模式学习笔记(3)工厂方法
- boolan——c++学习笔记之设计模式一
- boolan——c++学习笔记之设计模式二
- boolan——c++学习笔记之设计模式三
- Boolan C++设计模式 第一周笔记
- 设计模式学习---第八节:工厂方法模式
- 设计模式学习笔记——简单工厂模式、工厂方法模式、抽象工厂模式
- java 设计模式 学习笔记 (2) - 工厂方法模式
- 初识 PHP
- [面试算法] 排序算法
- Android studio协同SVN配置和上传、检出
- mysql批量删除数据表
- MFC打开已有的excel文件,并编辑,保存
- C++ 工厂方法设计模式的学习 (Boolan学习笔记第12周)
- ITK图像配准01-学习
- 登录远程服务器出现安全链接问题-java插件支持问题
- 个人网站导航
- label和input放置在同一行,并且设置占比
- ssh框架数据流向:页面——数据库——页面
- Jquery 基础知识
- OpenCV坑
- 4-7. Hibernate_Session 概述&缓存(Hibernate 一级缓存)&Session 核心方法