1. 程式人生 > >Asp.Net 設計模式 之 “工廠方法”即利用 接口 實現的抽象工廠

Asp.Net 設計模式 之 “工廠方法”即利用 接口 實現的抽象工廠

使用 face str 重寫 面向 number tor code namespace

  • 主要改動部分:

/// <summary>
/// 6.創建工廠方法模式(抽象工廠:接口)
/// </summary>
interface IFactory //父接口(父類工廠)
{
/// <summary>
/// 此父接口提供一個無參的函數方法
/// </summary>
/// <returns></returns>
Operation CreateOperation();
}
/// <summary>
/// 定義子類工廠,並繼承父類工廠(父接口)
/// </summary>
class FactoryAdd : IFactory
{
/// <summary>
/// 封裝與父類工廠同名函數(返回值類型亦相同)
/// </summary>
/// <returns></returns>
public Operation CreateOperation()
{
//返回上面OperationAdd子類
return new OperationAdd();
}
}

  • 源碼:
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 
  7 namespace FactoryModel
  8 {
  9     //====================使用C#,利用簡單工廠模式,實現簡單的計算器功能====================
 10     //考察時知識點:面向對象三大特性——繼承、封裝、多態
 11     /// <summary>
12 /// 1.定義父類,同時也是一個封裝 13 /// </summary> 14 class Operation 15 { 16 //2.因為要讓子類能夠對父類進行訪問,故應要將參數定義為受保護的變量類型 17 protected int numberA; 18 protected int numberB; 19 //定義屬性(必寫) 20 public int NumberA 21 { 22 get { return numberA; }
23 set { numberA = value; } 24 } 25 public int NumberB 26 { 27 get { return numberB; } 28 set { numberB = value; } 29 } 30 //3.封裝虛方法,以供子類進行重寫 31 public virtual int getResule() 32 { 33 int result = 0; 34 return result; 35 } 36 } 37 /// <summary> 38 /// 4.定義子類,繼承父類,並對父類進行重寫(加法) 39 /// </summary> 40 class OperationAdd : Operation 41 { 42 public override int getResule() 43 { 44 return numberA + numberB; 45 } 46 } 47 /// <summary> 48 /// 5.定義子類,繼承父類,並對父類進行重寫(減法) 49 /// </summary> 50 class OperationSub : Operation 51 { 52 public override int getResule() 53 { 54 return numberA - numberB; 55 } 56 } 57 /// <summary> 58 /// 6.創建工廠方法模式(抽象工廠:接口) 59 /// </summary> 60 interface IFactory //父接口(父類工廠) 61 { 62 /// <summary> 63 /// 此父接口提供一個無參的函數方法 64 /// </summary> 65 /// <returns></returns> 66 Operation CreateOperation(); 67 } 68 /// <summary> 69 /// 定義子類工廠,並繼承父類工廠(父接口) 70 /// </summary> 71 class FactoryAdd : IFactory 72 { 73 /// <summary> 74 /// 封裝與父類工廠同名函數(返回值類型亦相同) 75 /// </summary> 76 /// <returns></returns> 77 public Operation CreateOperation() 78 { 79 //返回上面OperationAdd子類 80 return new OperationAdd(); 81 } 82 } 83 /// <summary> 84 /// 定義子類工廠,並繼承父類工廠(父接口) 85 /// </summary> 86 class FactorySub : IFactory 87 { 88 /// <summary> 89 /// 封裝與父類工廠同名函數(返回值類型亦相同) 90 /// </summary> 91 /// <returns></returns> 92 public Operation CreateOperation() 93 { 94 ////返回上面OperationAdd子類 95 return new OperationSub(); 96 } 97 } 98 //7.主函數中進行調用 99 class Program 100 { 101 static void Main(string[] args) 102 { 103 //進行加法運算,指定相應的工廠類型即可,無須再次輸入運算類型 104 IFactory i = new FactorySub(); 105 //進行減法運算 106 //IFactory ii = new FactorySub(); 107 Operation op = i.CreateOperation(); 108 op.NumberA = 10; 109 op.NumberB = 30; 110 //調用子類中的方法來獲取結果 111 int result = op.getResule(); 112 Console.WriteLine(result); 113 Console.ReadKey(); 114 } 115 //如果在後續的編程中仍需要有其他的運算,則只需要在子類中加上相應的子類, 116 //並在工廠方法中中加上相應的工廠類即可即可,無須需改代碼,這也就是工廠方法(抽象工廠)的“利”所在 117 } 118 }

Asp.Net 設計模式 之 “工廠方法”即利用 接口 實現的抽象工廠