[设计模式]工厂方法模式(Factory Method)
来源:互联网 发布:linux vim环境配置 编辑:程序博客网 时间:2024/05/16 16:58
与抽象工厂的区别:抽象工厂的抽象类组合的是创建一个系列对象的接口。而工厂方法只有一个接口,各个具体类实现该接口的方式不一样。
1. 意图
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
2. 结构与参与者
3.效果
1)为子类提供挂钩(hook)
还没有搞懂
2)连接平行的类层次
4.实现
1)主要有两种不同的情况
1.Creator是一个抽象类并且不提供它所声明的工厂方法的实现。
2.Creator是一个具体的类而且为工厂方法提供一个缺省的实现。
2)参数化工厂方法
就是将简单工厂的switch语句从客户端移入Creator类中,起到了封装的作用。
5.代码示例
#include <string>#include <iostream>using namespace std;//实例基类,相当于Product(为了方便,没用抽象)class LeiFeng{public:virtual void Sweep(){cout<<"雷锋扫地"<<endl;}};//学雷锋的大学生,相当于ConcreteProductclass Student: public LeiFeng{public:virtual void Sweep(){cout<<"大学生扫地"<<endl;}};//学雷锋的志愿者,相当于ConcreteProductclass Volenter: public LeiFeng{public :virtual void Sweep(){cout<<"志愿者扫地"<<endl;}};//工场基类Creatorclass LeiFengFactory{public:virtual LeiFeng* CreateLeiFeng(){return new LeiFeng();}};//工场具体类class StudentFactory : public LeiFengFactory{public :virtual LeiFeng* CreateLeiFeng(){return new Student();}};class VolenterFactory : public LeiFengFactory{public:virtual LeiFeng* CreateLeiFeng(){return new Volenter();}};//客户端int main(){LeiFengFactory *sf=new LeiFengFactory();LeiFeng *s=sf->CreateLeiFeng();s->Sweep();StudentFactory *stf=new StudentFactory();LeiFeng *st=stf->CreateLeiFeng();st->Sweep();return 0;}
- 设计模式-工厂方法(Factory Method)
- 工厂方法(Factory Method)设计模式
- 设计模式 一 工厂方法Factory Method(工厂模式)
- 设计模式-工厂方法模式(factory method)
- 设计模式-工厂方法模式(Factory Method)
- 【设计模式】-工厂方法模式-Factory Method
- 设计模式 工厂方法模式 factory method
- 设计模式 工厂方法模式 Factory Method
- 设计模式2:Factory Method Pattern(工厂方法模式)
- .NET设计模式:工厂方法模式(Factory Method)
- Java设计模式-工厂方法(Factory Method)模式
- 设计模式之Factory Method(工厂方法模式)
- 设计模式(一) Factory Method工厂方法模式
- 代码设计模式之工厂方法模式(Factory Method)
- 设计模式之一 工厂方法模式(Factory Method)
- [设计模式]工厂方法模式(Factory Method)
- Java设计模式 - 工厂方法模式(Factory Method)
- 设计模式之工厂方法模式(Factory Method)
- JAVA 异常 try-catch
- mvc简介
- 内网(域)渗透 之 基本命令
- 嵌入式linux系统学习笔记
- linux 同步机制
- [设计模式]工厂方法模式(Factory Method)
- oracle update存储过程调用执行不成功的几个原因
- 文件类型的数据插入不到数据库(mySql)
- Hibernate 第十讲 表关联关系(七)单向多对一
- android定时器的用法总结
- c3p0配置
- Shell 编程10(字符串处理)
- 第一周练习题项目一练习二
- linux驱动编译的两种方式