《設計模式》學習筆記——靜態工廠模式
阿新 • • 發佈:2018-12-17
靜態工廠模式(StaticFactoryMethod)又叫做簡單工廠模式,屬於建立型模式但不屬於23種GOF設計模式之一。
簡單工廠模式是由一個工廠物件決定創建出哪一種產品類的例項。
簡單工廠模式是工廠模式家族中最簡單實用的模式,可以理解為是普通工廠模式的一個特殊實現。
以下程式碼以靜態水果工廠為例進行舉例說明:
StaticFactoryMethod.h
#pragma once #include<iostream> #include<string> class Fruit // 建立水果類的抽象介面類 { public: virtual Fruit* getFruit() = 0; private: protected: }; class Banana :public Fruit { public: Fruit * getFruit(void) { std::cout << "香蕉》》》"<<std::endl; return this;}; private: protected: }; class Apple :public Fruit { public: Fruit * getFruit(void) { std::cout << "蘋果》》》" << std::endl; return this; }; private: protected: }; class StaticFactoryMethod { public: StaticFactoryMethod(); ~StaticFactoryMethod(); Fruit *factoryCreating(std::string type) { if ("banana" == type) { return new Banana; } else if ("apple" == type) { return new Apple; } else return nullptr; }; };
StaticFactoryMethod.cpp
#include "StaticFactoryMethod.h"
StaticFactoryMethod::StaticFactoryMethod()
{
}
StaticFactoryMethod::~StaticFactoryMethod()
{
}
mainTest.cpp
#include<iostream> #include"StaticFactoryMethod.h" int main(void) { // 建立一個簡單工廠的例項 StaticFactoryMethod* staticFactory = new StaticFactoryMethod(); // 工廠生產水果 Fruit* fruit= staticFactory->factoryCreating("banana"); // dynamic_cast < type-id > ( expression )用於類層次間的上行轉換和下行轉換 Banana* banana = dynamic_cast<Banana* > (fruit->getFruit()); // 獲得工廠生產的水果 delete fruit; // 工廠生產水果 fruit = staticFactory->factoryCreating("apple"); // dynamic_cast < type-id > ( expression )用於類層次間的上行轉換和下行轉換 Apple* apple=dynamic_cast<Apple* > (fruit->getFruit()); // 獲得工廠生產的水果 delete fruit; // 工廠生產水果 fruit = staticFactory->factoryCreating("appl"); // dynamic_cast < type-id > ( expression )用於類層次間的上行轉換和下行轉換 if(nullptr != fruit) Apple* appl = dynamic_cast<Apple* > (fruit->getFruit()); // 獲得工廠生產的水果 delete fruit; delete staticFactory; staticFactory = nullptr; system("pause"); return 0; }