首页 > 代码库 > 简单工厂模式
简单工厂模式
简单工厂模式
一、简介
简单工厂模式又叫静态工厂方法(Static Factory Method)模式。
其实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
简单的说,就是一个专门的类来负责所有的实例的创建。
二、角色及其职责
工厂(Creator)角色
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。
抽象产品(Product)角色
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
具体产品(Concrete Product)角色
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
三、优缺点
优点:
1. 分离产品的创建者和消费者,有利于软件系统结构的优化。
2. 能根据外界给定的信息,决定应该创建哪个具体类的对象。
缺点:
1. 违反了开放封闭原则,如果需要添加新的类,需要改变工厂类。
2. 一旦工厂不能正常工作,整个系统都要受到影响
3. 由于工厂类是静态的,无法让子类继承,无法形成基于基类的继承树结构。
四、使用场景
工厂类负责创建的对象比较少;
五、源码
摘自《大话设计模式》
1 class COperation 2 { 3 public: 4 int m_nFirst; 5 int m_nSecond; 6 virtual double GetResult() = 0;11 };12 //加法13 class AddOperation : public COperation14 {15 public:16 virtual double GetResult()17 {18 return m_nFirst + m_nSecond;19 }20 };21 //减法22 class SubOperation : public COperation23 {24 public:25 virtual double GetResult()26 {27 return m_nFirst - m_nSecond;28 }29 };30 31 //工厂类32 class CCalculatorFactory33 {34 public:35 static COperation* Create(char cOperator);36 };37 38 COperation* CCalculatorFactory::Create(char cOperator)39 {40 COperation *oper;41 //在C#中可以用反射来取消判断时用的switch,在C++中用什么呢?RTTI??42 switch (cOperator)43 {44 case ‘+‘:45 oper=new AddOperation();46 break;47 case ‘-‘:48 oper=new SubOperation();49 break;50 default:51 oper=new AddOperation();52 break;53 }54 return oper;55 }56 57 客户端58 int main()59 {60 int a,b;61 cin>>a>>b;62 COperation * op = CCalculatorFactory::Create(‘-‘);63 op->m_nFirst=a;64 op->m_nSecond=b;65 cout<<op->GetResult()<<endl;66 return 0;67 }
简单工厂模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。