设计模式(5)--工厂模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式(5)--工厂模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//5.工廠模式
//ver1
//回顧簡單工廠模式
class OperationFactory
{
public:static Operation createOperation(char chOper){Operation * op = NULL;switch(chOper){case '+':op = new OperationAdd();break;case '-':op = new OperationSub();break;default:break;}return *op;}
};void main11()
{Operation oper;oper = OperationFactory::createOperation('+');oper.SetNumberA(1.1);oper.SetNumberB(2.2);double result = oper.GetResult();
}//工廠模式:
//工廠接口
class Operation
{
public:Operation(){}~Operation(){}
protected:double _NumberA;double _NumberB;
public:void SetNumberA(double A){_NumberA = A;}double GetNumberA(){return _NumberA;}void SetNumberB(double B){_NumberB = B;}double GetNumberB(){return _NumberB;}virtual double GetResult(){double result = 0;return result;}
};class OperationAdd : public Operation
{
public:virtual double GetResult(){double result = _NumberA + _NumberB;return result;}
};class OperationSub : public Operation
{
public:virtual double GetResult(){double result = _NumberA - _NumberB;return result;}
};class IFactory
{
public:virtual Operation CreateOperation(){Operation * po = NULL;return *po;}
};class AddFactory : public IFactory
{
public:virtual Operation CreateOperation(){Operation * po = new OperationAdd();return *po;}
};class SubFactory : public IFactory
{
public:virtual Operation CreateOperation(){Operation * po = new OperationSub();return *po;}
};void main1()
{IFactory * pif = new AddFactory();Operation po = pif->CreateOperation();po.SetNumberA(1.1);po.SetNumberB(2.2);double result = po.GetResult();
}
?
//簡單工廠模式的最大優點在于工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態實例化相關的類,
//對于客戶端來說,去除了與具體產品的依賴。
//工廠模式,定義一個用于創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。
//工廠模式實現時,客戶端需要決定實例化哪一個工廠來實現運算類,選擇判斷的問題還是存在,也就是說,工廠方式把
//簡單工廠的內部邏輯判斷移到了客戶端代碼來進行。你想要加功能,本來是改工廠類,現在是改客戶端。
?
//5.工廠模式 //ver2 class LeiFeng { public:void Sweep(){//打掃}void Wash(){//洗衣} };//學習雷鋒大學生 class Undergraduate : public LeiFeng {};//志愿者 class Volunteer : public LeiFeng {};//簡單雷鋒工廠 class SimpleFactory { public:static LeiFeng CreateLeiFeng(char cType){LeiFeng * plf = NULL;switch (cType){case '1': //大學生plf = new Undergraduate();break;case '2': //志愿者plf = new Volunteer();break;default:break;}return *plf;} };void main21() {LeiFeng stuA = SimpleFactory::CreateLeiFeng('1');stuA.Sweep();LeiFeng volA = SimpleFactory::CreateLeiFeng('2');volA.Wash(); }//雷鋒工廠 class IFactory { public://IFactory(){}LeiFeng CreateLeiFeng(){LeiFeng * plf = new LeiFeng();return *plf;} };//大學生工廠 class UndergraduateFactory : public IFactory { public://UndergraduateFactory(){}LeiFeng CreateLeiFeng(){LeiFeng *plf = new Undergraduate();return *plf;} };//志愿者工廠 class VolunteerFactory : public IFactory { public://VolunteerFactory(){}LeiFeng CreateLeiFeng(){LeiFeng * plf = new Volunteer();return *plf;} };void main22() {IFactory * pf = new UndergraduateFactory();LeiFeng stu = pf->CreateLeiFeng();stu.Sweep();stu.Wash(); }?
//工廠模式客服了簡單工廠違背開放-封閉原則的缺點,又保持了封裝對象創建過程的優點。
//缺點:每加一個產品,就需要加一個產品工廠的類,增加了額外的開發量。
?
轉載于:https://www.cnblogs.com/sylar-liang/p/6025042.html
總結
以上是生活随笔為你收集整理的设计模式(5)--工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交通银行信用卡为什么不能分期?想分期的看
- 下一篇: 柠檬酸循环