設計模式----設計遵循法則及(簡單工廠,Factory 方法,單例模式)(2018/10/29)

來源:互聯網
上載者:User

標籤:eal   優缺點   接受   bsp   console   方法   rgs   步驟   app   

一.設計遵循法則

設計模式是在特定環境下人們解決某類重複出現問題的一套成功或有效解決方案.

設計模式目前種類: GoF 的 23 種 + “簡單原廠模式” = 24 種。

設計模式的作用:高內聚低耦合
軟體開發的原則:

迪米特: 多組合 少繼承 
裡式替換: 多態
合成複用: 多組合,少繼承
依賴倒轉: 
單一:
開閉:

 

二.簡單工廠

一個抽象父類 N個實作類別 還有一個工廠  

參數不同 結果不同 父類返回 switch 簡單工廠(變形

代碼執行個體:

 1 using System; 2 namespace day24 3 { 4     public abstract class Phone//父類 5     { 6         public string PhoneName; 7         public abstract void Show(); 8     } 9     public class FSK//工廠10     {11         public static Phone CreatePhoneByName(string phoneName)12         {13             Phone returnValue;14             switch (phoneName)15             {16                 case "Apple":17                     returnValue = new ApplexRS();18                     returnValue.PhoneName = "AppleXRS";19                     return returnValue;20                 case "Mi":21                     returnValue = new MIMix3();22                     returnValue.PhoneName = "MIMix3";23                     return returnValue;24                 case "HuaWei":25                     returnValue = new HuaWeics();26                     returnValue.PhoneName = "HuaWeics";27                     return returnValue;28                 case "MeiTu":29                     returnValue = new MeiTu();30                     returnValue.PhoneName = "MeiTu";31                     return returnValue;32             }33             return null;34         }35     }36     public class HuaWeics : Phone//子類0137     {38         public override void Show()39         {40             Console.WriteLine("我是{0}手機 我在展示最新功能!", PhoneName);41         }42     }43     public class MIMix3 : Phone//子類0244     {45         public override void Show()46         {47             Console.WriteLine("我是{0}手機 我在展示最新功能!", PhoneName);48         }49     }50     public class MeiTu : Phone//子類0351    {52         public override void Show()53         {54             Console.WriteLine("我是{0}手機 我在展示最新功能!", PhoneName);55         }56     }57     public class ApplexRS : Phone//子類0458     {59         public override void Show()60         {61             Console.WriteLine("我是{0}手機 我在展示最新功能!", PhoneName);62         }63     }64     internal class Program//實現65     {66         public static void Main(string[] args)67         {68             //傳遞參數給富士康, 富士康接受參數返回結果69             Phone createPhone = FSK.CreatePhoneByName("MeiTu");70             createPhone.Show();71         }72     }73 }
View Code

 優缺點:

優點: 實現了對象建立和使用的分離。

         不需要記住具體類名,記住參數即可,減少使用者記憶量。

缺點: 對工廠類職責過重,一旦不能工作,系統受到影響。

 增加系統中類的個數,複雜度和理解度增加。

違反“開閉原則”,添加新產品需要修改工廠邏輯,工廠越來越複雜。

三.Factory 方法

一個物品對應一個工廠! 實現自給自足

代碼執行個體:

 1 using System; 2 namespace Factory 方法 3 { 4     public abstract class AbsPhone//手機父類 5     { 6         public  abstract void Show(); 7     } 8     public abstract class AbsFac//工廠父類 9     {10         public abstract AbsPhone CreatePhone();11     }12     public class HuaWei : AbsPhone//手機子類0113     {14         public override void Show()15         {16             Console.WriteLine("我是華為手機");17         }18     }19     public class HuaWeiFac : AbsFac//工廠子類0120     {21         public override AbsPhone CreatePhone()22         {23             return new HuaWei();24         }25     }26     internal class Program//主函數27     {28         // 一個物體對應一個工廠29         public static void Main(string[] args)30         {31             Console.Read();32         }33     }34 }
View Code

 優缺點:

優點: 不需要記住具體類名,甚至連具體參數都不用記憶。

 實現了對象建立和使用的分離。

 系統的可擴充性也就變得非常好,無需修改介面和原類

缺點: 增加系統中類的個數,複雜度和理解度增加。

 增加了系統的抽象性和理解難度。

四.單例模式

單---->唯一 單個

例----> 執行個體 對象

步驟:

1).定義靜態私人對象

2).建構函式私人化

3).定義一個靜態 傳回值為該類型的方法 一般以Getinstance/getInit為方法名稱

單例模式有懶漢和惡漢,懶漢線程不安全 最好使用餓漢.

代碼執行個體

懶漢模式:後執行個體化

 1 using System; 2 namespace 單例模式 3 { 4     // 定義靜態私人對象 5     // 建構函式私人化 6     //定義一個靜態 傳回值為該類型的方法 一般以Getinstance/getInit為方法名稱 7     class Singleton 8     { 9         private static Singleton _singleton;//第一步10         private Singleton()//第二步11         {12             //初始化13         }14         public static Singleton GetInstance()//第三步15         {16             if (null == _singleton)17             {18                 _singleton = new Singleton();19                 Console.WriteLine("呵呵");20             }21             return _singleton;22         }23     }        24     internal class Program25     {26         public static void Main(string[] args)27         {28             for (int i = 0; i < 100; i++)29             {30                 Singleton.GetInstance();31             }32         }33     }34 }
View Code

餓漢模式:先執行個體化

 1  public class HungrySingle  2     { 3  4     private static   HungrySingle sInstance = new HungrySingle();//第一步 5  6     private HungrySingle() //第二步 7     { 8  9     }10 11     public static HungrySingle getInstance() //第三步12     {13         return sInstance;14     }15 16    }
View Code

 

unity裡面的單利模式的寫法:

 1 public sealed class SingletonMoBehaviour: MonoBehaviour 2 {  3     private static volatile SingletonBehaviour instance;  4     private static object syncRoot = new Object();  5     public static SingletonBehaviour Instance  6     {  7         get   8         {  9             if (instance == null)  10             { 11                 lock (syncRoot)  12                 { 13                     if (instance == null)  {14                         SingletonBehaviour[] instances = FindObjectsOfType<SingletonBehaviour>();15                         if (instances != null){16                             for (var i = 0; i < instances.Length; i++) {17                                 Destroy(instances[i].gameObject);18                             }19                         }20                         GameObject go = new GameObject("_SingletonBehaviour");21                         instance = go.AddComponent<SingletonBehaviour>();22                         DontDestroyOnLoad(go); 23                     }24                 } 25             } 26             return instance; 27         } 28     } 29 }
View Code

懶漢和惡漢有區別,但是在unity裡面都行,因為不涉及多線程!!!

拓展知識:

線程: 是CPU直接切換的 並行
進程: 是分配資源的單位

設計模式----設計遵循法則及(簡單工廠,Factory 方法,單例模式)(2018/10/29)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.