1. 程式人生 > >設計模式 (工廠類=父類;實現類=子類)

設計模式 (工廠類=父類;實現類=子類)

設計模式

是在特定環境下人們解決某類重複出現額問題的一套成功的有效的方案
四人組(gang of four) 將"模式"的概念引入軟體工程
“在一定的環境下,用固定套路解決問題”

設計模式的概念

設計模式的基礎是: 多型
設計模式的原則是: 高內聚 ,低耦合(各個類之間少參與,保持模組性)
單一職責原則: 類的職責單一,對外只提供一種功能,引起變化的原因也只有一個.
開閉原則: 類的改動是通過增加程式碼而進行的,而不是修改原始碼.
迪米特法則: 一個物件應當對其他物件儘可能的少了解,從而降低各個物件之間的耦合,提高系統的可維護性.符合設計模式的基本原則(多組合,少繼承).
里氏代換原則:

任何抽象類出現的地方都可以用他的實現類代替,實際就是虛擬機制,語言級別實現面向物件功能.
依賴倒轉原則: 依賴於抽象介面,不要依賴於具體的實現類,也就是針對介面程式設計.

簡單工廠和工廠方法

簡單工廠的優點

1.實現了物件建立和使用的分離
2.不用記住類名,只需記住引數,減少了記憶量

簡單工廠的缺點

1.對工廠類負擔過重
2.複雜度增加
3.違反了工廠的原則
簡單工廠步驟
1.先建立一個抽象工廠類
2.在抽象工廠類裡面寫一個抽象方法
3.建立一個普通類
4.在普通類中重寫抽象方法

 public abstract class AbsFruit
        {
            public
abstract void showName(); } class Apple : AbsFruit { public override void showName() { Console.WriteLine("蘋果"); } } class Banana : AbsFruit { public override void showName() {
Console.WriteLine("香蕉"); } }

在這裡插入圖片描述
工廠方法:
是一個產品一個廠
優點是
1.不需要記住具體類名,甚至連具體引數都不用記憶
2.實現了物件建立和使用的分離
3.系統的可拓展性也就變得風場好,無需修改介面和原類
缺點是
1.增加系統中類的個數,複雜度和理解度增加
2.增加了系統的抽象性和理解難度

第一步建立一個抽象工廠類

namespace 工廠方法
{
    public abstract class AbsFac
    {
        public abstract AbsPhone CreatePhone();
    }
}

第二步建立一個抽象手機類

namespace 工廠方法
{
    public abstract class AbsPhone
    {
        public abstract void show();
    }
}

第三步建立一個實現手機類

namespace 工廠方法
{
    public class Apple : AbsPhone
    {
        public override void show()
        {
            Console.WriteLine("apple");
        }
    }
}

第四步建立一個實現手機工廠類

namespace 工廠方法
{
    public class AppleFac : AbsFac

    {
        public override AbsPhone CreatePhone()
        {

            return new Apple();
        }


    }
}

第五步建立一個主類

namespace 工廠方法
{
    class Program
    {
        static void Main(string[] args)
        {
            AppleFac apple = new AppleFac();
            apple.CreatePhone().show();
            Console.WriteLine();
        }
    }
}

單例模式

分為懶漢模式餓漢模式

懶漢模式指的是需要用了的時候在建立 (if == null)就建立
懶漢模式適用於執行緒比較少的場景,因為執行緒一旦多,加鎖的開銷就會體現出來(當然最後對懶漢優化的那種方案已經差不多解決這個問題了),總之它是一種時間換空間的模式。

餓漢模式指的是不論之前有沒有直接建立
餓漢模式適用於執行緒比較多的場景,它會佔用全域性靜態區一定的空間,但是能夠確保只有一個例項。但是當執行緒很少,甚至是沒有用到這個單例類的時候,就顯得得不償失了,它佔用的空間問題就體現出來了,這是一種空間換時間的模式。