一.面向對象的設計原則
1.單一職責原則: 系統中每個對象隻有一個單獨的職責,對外提供一種功能,引起類變化的原因隻有一個。
2.開閉原則:即對修改關閉,對擴充開放。要更改時是通過增加代碼進行的,而不是改動現在的代碼,否則會産生不可預知的後果。
3.依賴注入原則:要依賴于抽象,不要依賴于具體的實作,如果有類調用其他的類,就應該調用類的接口或者抽象類,而不是直接調用實作類。
4.裡氏替換原則:任何抽象類出現的地方都可以用實作類來替換。
5.迪米特原則:一個對象應當對其他對象盡可能少的了解,降低耦合度。
6.接口分離原則:一個接口應該隻提供一種對外功能。
7.優先使用組合而不是繼承:繼承會導緻級聯變化,較難修改。
二.單例模式
當一個對象在整個程式中隻有一個的時候,每次獲得該對象,應該獲得都是同一個對象,這時候就應該用單例模式。
有兩種,一種是餓漢式,餓得等不及了,一開始就建立了一個對象。
/*
單例模式(餓漢式)
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 設計模式Demo
{
class Singleton
{
static Singleton singleton = new Singleton();
public static Singleton GetSingleton()
{
return singleton;
}
public void Show()
{
Console.WriteLine("hehe!");
}
//構造函數私有化
private Singleton()
{ }
}
class Program
{
static void Main(string[] args)
{
Singleton.GetSingleton().Show();
Console.ReadLine();
}
}
}
另一種是懶漢式,先偷會兒懶,等到用的時候才建立:
/*
單例模式(懶漢式)
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 設計模式Demo
{
class Singleton
{
static Singleton singleton = null;
public static Singleton GetSingleton()
{
if (singleton == null)
singleton = new Singleton();
return singleton;
}
public void Show()
{
Console.WriteLine("hehe!");
}
//構造函數私有化
private Singleton()
{ }
}
class Program
{
static void Main(string[] args)
{
Singleton.GetSingleton().Show();
Console.ReadLine();
}
}
}
注意,在懶漢式中,如果有多線程,有可能會出現問題。即判斷singleton==null之後,有可能發生CPU輪換。這裡我們可以加上同步的一些函數,來防止出現這種情況。或者直接采用餓漢式。
單例模式經常在檔案管理,資料庫連接配接池等中使用。