1. 程式人生 > >設計模式之抽象工程模式Abstract Factory Pattern()C++實現

設計模式之抽象工程模式Abstract Factory Pattern()C++實現

抽象工廠模式(Abstract Factory Pattern):是圍繞一個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。在抽象工廠模式中,介面是負責建立一個相關物件的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式提供物件。

意圖:提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。

主要解決:主要解決介面選擇的問題。

何時使用:系統的產品有多於一個的產品族,而系統只消費其中某一族的產品。

程式碼

//-------------------------------------------------------
// 設計模式:抽象工程模式
//-------------------------------------------------------
#include "stdafx.h"
#include<iostream>
#include <cstring>
using namespace std;
//------------------------------------------------------------------------------------------
class Shape
{
public:
	void virtual draw()=0;
};

class Rec : public Shape
{
public:
	void draw()
	{
		cout << "Rec.draw()"<< endl;
	}
};

class Square : public Shape
{
public:
	void draw()
	{
		cout << "Square.draw()"<< endl;
	}
};

class Circle : public Shape
{
public:
	void draw()
	{
		cout << "Circle.draw()"<< endl;
	}
};
//------------------------------------------------------------------------------------------
class Color
{
public:
	void virtual fill() = 0;
};

class Red :public Color
{
public:
	void fill()
	{
		cout << "Color.Red()" << endl;
	}
};

class Green :public Color
{
public:
	void fill()
	{
		cout << "Color.Green()" << endl;
	}
};
class Blue :public Color
{
public:
	void fill()
	{
		cout << "Color.Blue()" << endl;
	}
};
//-----------------------------------------------------------------------------
class AbstractFactory
{
public:
	virtual Color* getColor(string color)=0;
	virtual Shape* getShape(string shape)=0;
};

class ShapeFactory : public AbstractFactory
{
public:
	Shape* getShape(string shape)
	{
		if (shape.empty())
		{
			return NULL;
		}
		if (shape.compare("Rec") == 0)
		{
			return new Rec();
		}
		if (shape.compare("Square") == 0)
		{
			return new Square();
		}
		if (shape.compare("Circle") == 0)
		{
			return new Circle();
		}
		return NULL;
	}
	Color* getColor(string color)
	{
		return NULL;
	}
};

class ColorFactory : public AbstractFactory
{
public:
	Color* getColor(string color)
	{
		if (color.empty())
		{
			return NULL;
		}
		if (color.compare("Red") == 0)
		{
			return new Red();
		}
		if (color.compare("Green") == 0)
		{
			return new Green();
		}
		if (color.compare("Blue") == 0)
		{
			return new Blue();
		}
		return NULL;
	}
	Shape* getShape(string shape)
	{
		return NULL;
	}
};

class FactoryProducer
{
public:
	AbstractFactory* getFactory(string choice)
	{
		if (choice.compare("SHAPE") == 0)
		{
			return new ShapeFactory();
		}else if (choice.compare("Color") == 0)
		{
			return new ColorFactory();
		}
		return NULL;
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	FactoryProducer factoryProducer;
	AbstractFactory* shapeFactory = factoryProducer.getFactory("SHAPE");

	Shape *shape1 = shapeFactory->getShape("Circle");
	shape1->draw();

	Shape *shape2 = shapeFactory->getShape("Square");
	shape2->draw();

	Shape *shape3 = shapeFactory->getShape("Rec");
	shape3->draw();

	//---------------------------------------------------------------------------
	AbstractFactory *colorFactory = factoryProducer.getFactory("Color");

	Color* color1 = colorFactory->getColor("Red");
	color1->fill();

	Color* color2 = colorFactory->getColor("Blue");
	color2->fill();

	Color* color3 = colorFactory->getColor("Green");
	color3->fill();

	system("PAUSE");
	return 0;
}


相關推薦

設計模式抽象工程模式Abstract Factory Pattern()C++實現

抽象工廠模式(Abstract Factory Pattern):是圍繞一個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。在抽象工廠模式中,介面是負責建立一個相關物件的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式提供物件。 意圖:提供一個建立一系列相

設計模式---對象創建模式抽象工廠模式Abstract Factory

變化 實現 clas span 有關 數據庫 數據庫連接 不同的 面向 一:概念 抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的。抽象工廠模式可以向客戶端提供一個接口,使得客戶端在不必指定產品的具體類型的情況下,能夠創建多個產品族的產品對象 二:動機

設計模式抽象工廠模式(Abstract Factory)

3. 抽象工廠模式(Abstract Factory) 目錄 抽象工廠模式(Abstract Factory) 模式動機 模式定義 模式結構 時序圖 程式碼分析 模式分析 例項 優點 缺點

JAVA設計模式抽象工廠模式(Abstract Factory)

目錄 在工廠方法模式中具體工廠負責生產具體的產品,每一個具體工廠對應一種具體產品,工廠方法也具有唯一性,一般情況下,一個具體工廠中只有一個工廠方法或者一組過載的工廠方法。但是有時候我們需要一個工廠可以提供多個產品物件,而不是單一的產品物件。 為了更清晰地

23種設計模式抽象工廠模式

tor turn sql數據庫 png insert face sign 相關 reat 抽象工廠模式(Abstract Factory):提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。 package designMode.abstractFa

設計模式抽象工廠模式

bash 在外 明顯 根據 strac 構圖 case reader oss 抽象工廠模式(Abstract Factory),是23種設計模式之一。DP中是這麽定義抽象工廠模式的: 抽象工廠模式(Abstract Factory),提供一個創建一系列相關或互相依賴對象的

golang設計模式抽象工廠模式

抽象工廠模式 簡介 wiki: 抽象工廠模式(英語:Abstract factory pattern)是一種軟體開發設計模式。抽象工廠模式提供了一種方式,可以將一組具有同一主題的單獨的工廠封裝起來。在正常使用中,客戶端程式需要建立抽象工廠的具體實現,然後使用抽象工廠作為介面來建立這一主題的具體物件。

設計模式抽象工廠模式(Java實現)

抽象工廠是一個超級工廠,用來建立其他工廠,又稱為工廠的工廠,也就是對各種不同的工廠再次進行抽象。在抽象工廠模式中,介面負責建立相關物件的工廠, 每個生成的工廠可以按照工廠模式提供物件。 首先建立兩個介面然後實現具體類 //再建立一個介面Plant interface Plant {

php 設計模式抽象工廠模式

抽象工廠模式(Abstact Factory)是一種常見的軟體設計模式。該模式為一個產品族提供了統一的建立介面。當需要這個產品族的某一系列的時候,可以為此係列的產品族建立一個具體的工廠類。一、意圖抽象工廠模式提供一個建立一系統相關或相互依賴物件的介面,而無需指定它們具體的類【GOF95】二、抽象工廠模式結構圖

(四) 設計模式抽象工廠模式

前面已經說過了簡單工廠模式和普通工廠模式:連結 前沿: 參考圖書:《軟體設計模式與體系結構》   抽象工廠就是普通工廠模式的加強版本 優點:當一個產品族中的多個物件被設計成一起工作時,它能保證客戶端始終只使用同一個產品族中的物件。 使用場景: 1、QQ

趣味設計模式抽象工廠模式

    上篇博文我簡介的介紹了下工廠模式,不知道是不是幫助到了部分人,下面我們再來探討下抽象工廠模式。     某一天,唐三藏一行人西行的路上遇到了一個強大無比的妖怪,唐僧被抓走了,光靠悟空他們沒有辦法把唐僧救回來,這個時候就需要找救兵了。悟空他們第一

建立型設計模式抽象工廠模式

抽象工廠模式介紹 在前面已經講解過工廠方法模式,這倆者有什麼區別呢?前面所說的工廠方法模式只會生產一種具體的產品,而抽象工廠模式生產出來的產品是不確定的。例如不同作業系統中控制元件的實現不一樣,展示效果也不一樣,對於作業系統如Android,iOS,WindowPhone本

Java設計模式抽象工廠模式

抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。 在抽象工廠模式中,介面是負責建立一個相關物件的工廠,不需要顯式指定它們的類。每

17、設計模式抽象工廠模式

抽象類 public abstract class Video { public abstract void produce(); } public abstract class Arictle { public abstract void produce

大話設計模式抽象工廠模式

 抽象 工廠模式的本質:簡單工廠模式+反射,通過反射,將 簡單工廠模式中的switch case 去除,如果有新的演算法, 只需要 新增新的演算法類和配置檔案 即可 直接看程式碼把,之前學過 簡單工廠模式 就好理解了 /** * 基類 加 減 成 除 的共性 *

c++設計模式抽象工廠模式

抽象工廠模式是提供一個介面,用來建立一系列物件的介面。 #include <iostream> #include <string> #include <memory> using namespace std; /* 抽象工廠模式 * 抽象工廠模

23中設計模式抽象工廠模式

抽象工廠模式的定義 定義: 為建立一組相關或互相依賴的物件提供一個介面,而且無須制定它們的具體類 抽象工廠模式的實現 兩個產品族, 其類圖如下:   抽象產品類程式碼如下:   產品A的1級和2級類程式碼如下:   產品

通過例子學設計模式--抽象工廠模式以及使用場景說明(C++實現)

    考慮這樣一個場景,PC機有IBM和Lenvo2個品牌。兩者都有各自的CPU,記憶體RAM,硬碟Disk,網絡卡NetCard等等十幾個元件。如何建立這些產品物件呢?      (1)如果用簡單工廠,比如使用一個工廠(PC工廠),或者2個工廠(IBM工廠,Lenvo工

PHP設計模式抽象工廠模式

<?php /** * Created by PhpStorm. * User: hzh * Date: 2018/8/4 * Time: 16:17 */ /* * 制定運動介面

C#設計模式抽象工廠模式示例原始碼

using System; namespace Design_Pattern { public class Computer {    private RAM Ram;    private CPU Cpu;    public Computer(RAM ram,CPU c