Net設計模式之工廠方法模式( Factory Method Pattern)

一、工廠方法模式簡介(Brief Introduction

工廠方法模式(Factory Method Pattern),定義一個用於創建對象的接口,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延遲到其子類中。

二、解決的問題(What To Solve

       工廠方法模式較簡單工廠模式,修改時關閉的,擴展時開放的,完全符合開放-封閉原則。工廠方法使一個類的實例化延遲到其子類中。

三、工廠方法模式分析(Analysis

1、工廠方法模式結構

Product抽象類,定義工廠方法所創建的對象接口。

ConcreteProduct實現類,具體的產品,實現Product接口。

Factory抽象類,聲明工廠方法,該方法返回一個Product類型的對象。

ConcreteFactory,抽象工廠類Factory的具體實現,返回一個ConcreteProduct實例

四.實例分析(Example

1、場景

一個簡單計算器,具有簡單的加操作和減操作。結構如下圖所示

 

Factory:抽象工廠方法類.

AddFactory:加法工廠

SubFactory,減法工廠.

Operation:抽象操作類

AddOperation:加法操作

SubOperation:減法操作

2、代碼

1抽象操作類Operation及其具體實現類AddOperationSubOperation

/// <summary>

/// 抽象操作類

/// </summary>

public abstract class Operation

{

    public int numberA;

    public int numberB;

    public abstract int GetResult();

}

/// <summary>

/// 加法操作

/// </summary>

public class AddOperation : Operation

{

    public override int GetResult()

    {

       return (this.numberA + this.numberB);

    }

}

/// <summary>

/// 減法操作

/// </summary>

public class SubOperation : Operation

{

    public override int GetResult()

    {

        return (this.numberA - this.numberB);

    }

}

 

2、抽象工廠類Factory及其具體工廠類AddFactorySubFactory

public abstract class Factory

{

    public abstract Operation CreateOperation();

}

 

public class AddFactory : Factory

{

    public override Operation CreateOperation()

    {

        return new AddOperation();

    }

}

 

public class SubFactory:Factory

{

    public override Operation CreateOperation()

    {

        return new SubOperation();

    }

}

 

3、客戶端代碼

static void Main(string[] args)

{

    Console.WriteLine("使用工廠方法進行計算");

    Factory factory1 = new AddFactory();

    Operation operation1= factory1.CreateOperation();

    operation1.numberA = 10;

    operation1.numberB = 20;

    Console.WriteLine("{0}+{1}={2}", operation1.numberA, operation1.numberB, operation1.GetResult());

 

    Factory factory2 = new SubFactory();

    Operation operation2 = factory2.CreateOperation();

    operation2.numberA = 10;

    operation2.numberB = 20;

    Console.WriteLine("{0}+{1}={2}", operation2.numberA, operation2.numberB, operation2.GetResult());

    Console.Read();

}

3、實例運行結果

五、總結(Summary

本文對工廠方法模式(Factory Method Pattern)的概念及其設計結構圖簡單地進行了描述,同樣也以一個計算器的實例進行了說明,工廠方法模式較簡單工廠模式,修改時關閉的,擴展時開放的,完全符合開放-封閉原則.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章