[設計模式整理筆記 一] 基礎知識

來源:互聯網
上載者:User

[導讀]

[設計模式整理筆記 一] 基礎知識

[設計模式整理筆記 二] 簡單原廠模式(Simple Factory)

[設計模式整理筆記 三] 原廠模式(Factory)

[設計模式整理筆記 四] 抽象原廠模式(Abstract Factory)

[設計模式整理筆記 五] 建立者模式(Builder)

[設計模式整理筆記 六] 原廠模式與建立者模式總結

[設計模式整理筆記 七] 原型模式(ProtoType)

[設計模式整理筆記 八] 單例模式(Singleton)

[設計模式整理筆記 九] 面板模式(Facade)

....後續, 包括部分例子

[/導讀]

 

設計模式的範圍極廣, 我最近也是略來整理與研究了一下, 感覺每一段時間整理一下自己學到的東西, 會發現得到的知識會比以前學的更多更全面, 不然都是散散的在腦袋裡面。下面例子是一個大型企業的計算工資模式, 因為有很多各地的子公司, 當然計算工資的方法也是不同的。

先定義一個介面, 確定計算工資的方法, 如下:

using System;

namespace ConsoleApp
{
    public interface ISalary
    {
        void CommandSalary();
    }
}

 

下面各地不同的子公司分別繼承這個介面的CommandSalary方法,下面是深圳與北京二個地方的計算方法。設計二個類如下:

代碼

using System;

namespace ConsoleApp
{
    public class ShenZhenSalary : ISalary
    {
        public void CommandSalary()
        {
            Console.WriteLine("這是深圳子公司的工資計算模組");
        }
    }
}

 

 北京子公司

代碼

using System;

namespace ConsoleApp
{
    public class BeiJinSalary : ISalary
    {
        public void CommandSalary()
        {
            Console.WriteLine("這是北京子公司的工資計算模組");
        }
    }
}

 

到裡面基本類已經設計完成, 好多人都會在代碼中要用到時候new一個出來,這樣的代碼可能會造成難以維護, 給人好亂的感覺。 或像下面的代碼那樣調用,代碼如下:

代碼

using System;

namespace ConsoleApp
{
    class Program
    {
        public static void Main(string[] args)
        {
            ISalary Salary = CreateSalary("BeiJin");  //需要調用子公司的工資計算過程時, 把子公司的名稱傳進去
            Salary.CommandSalary();
            Console.ReadLine();
        }

        /// <summary>
        /// 通過傳進的公司名返回相應的執行個體
        /// </summary>
        /// <param name="CompanyName">子公司的名稱</param>
        /// <returns></returns>
        private static ISalary CreateSalary(string CompanyName)
        {
            ISalary Salary = null;
            if (CompanyName == "ShenZhen")  //這裡可以通過更多方法來判斷,通過不同的名返回相應的執行個體
            {
                Salary = new ShenZhenSalary();
            }
            else if (CompanyName == "BeiJin")
            {
                Salary = new BeiJinSalary();
            }
            return Salary;
        }
    }
}

 

這樣就可以調用計算得到各子公司的工資, 對於小型的公司, 這樣的設計已經是相當的完美了, 但對於一個大公司, 子公司可能有幾十個更甚至幾百個, 這樣在CreateSalary中就需要更多的if來判斷了, 這顯然對維護是極為不好的, 那需要怎樣設計呢? 這就是所要討論到的設計模式了, 下面接著的文章就會是常用的原廠模式來編寫這個模組。

注:這是一個新手常用的寫法,這還沒講到原廠模式,這裡只是說這樣寫的類不好,不符合系統的設計模式, 先舉個反例, 後面將會介紹設計模式。有些朋友沒看清楚, 標註一下。

 

(註:這是個人學習過程的心得,可能存在極大的錯誤,請大家指正)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.