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

来源:http://www.cnblogs.com/pang951189/archive/2017/11/08/7805452.html
-Advertisement-
Play Games

主要改動部分: /// <summary> /// 6.創建工廠方法模式(抽象工廠:介面) /// </summary> interface IFactory //父介面(父類工廠) { /// <summary> /// 此父介面提供一個無參的函數方法 /// </summary> /// <re ...


  • 主要改動部分:

/// <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 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [20171106]修改show spparameter的顯示寬度.txt--//很多年前做的,修改show parameter的顯示寬度.--//鏈接: [20121023]改變show parameter的顯示寬度.txt=>http://blog.itpub.net/267265/viewsp ...
  • [20171106]配置客戶端連接註意.txt--//在配置客戶端連接時一般建議使用Net Manager工具,windows下調用執行Net Manager.--//linux下執行 netmgr,這樣能一定程度避免copy & paste的 錯誤.--//我這裡想說的是在連接類型選擇上一定要註意 ...
  • Oracle 11g中有個新特性:新增了一個參數: ‘‘deferred_segment_creation’’:意思是段延遲創建,預設是True。 參數為True的話,你新建張table1表,並且沒有插入數據,oracle不會向這個表分配extent,也就是不占用空間,也不分配segment,所以表 ...
  • 測試代碼: 效果: 對checkedComboBoxEdit的多值進行SQL查詢時,查詢中使用IN語句,IN裡面第一個條件後面的所有條件的前面都會多出一個空格,導致查詢不正確 需將空格去掉再傳入SQL查詢: ...
  • 解決方案中的數據層項目最初使用的是oracle 11g + ef5 創建的實體模型,在分頁時遇到了skip參數為0報錯的問題,沒有找到相關資料。 於是決定升級到ef6,在oracle官網中得知,Oracle Data Provider for .NET in ODAC 12c Release 3 開 ...
  • 規劃許可權管理至少實現菜單許可權、界面許可權、動作許可權(按鈕)、服務許可權。 研究如何實現數據許可權等細粒度許可權。 (1)系統菜單管理 EF架構~性能高效的批量操作(Insert篇) ...
  • 當我第一次添加滾動條時候,我發現滾動條總是跑向上方,經過研究 解決方案如下: this.textBox1.Focus(); 獲取焦點 this.textBox1.Select(this.textBox1.textLength,0); 選擇到最後一行文本 this.textBox1.ScrollToC ...
  • Problem Description potato老師雖然很喜歡教書,但是迫於生活壓力,不得不想辦法在業餘時間掙點外快以養家糊口。“做什麼比較掙錢呢?篩沙子沒力氣,看大門又不夠帥...”potato老師很是無奈。“張藝謀比你還難看,現在多有錢呀,聽說還要導演奧運開幕式呢!你為什麼不去娛樂圈發展呢? ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...