当前位置: 代码迷 >> C# >> [設計方式].01.簡單工廠模式
  详细解决方案

[設計方式].01.簡單工廠模式

热度:62   发布时间:2016-05-05 04:50:35.0
[設計模式].01.簡單工廠模式
  • 用戶接口
1 //定義一個用戶該有的操作2 public interface IUser3 {4     bool Login(string userName, string psw);5     bool Login();6     bool Exsit();7 }
  • 用戶抽象類
 1 //定義一個抽象類,讓它去實現IUser接口 2 //編寫每個要User類需要執行的操作,如登錄信息記錄到日志,修飾符定義為可重寫virtual 3 public abstract class User : IUser 4 { 5     public string UserName { get; set; } 6     public string Psw { get; set; } 7     public User() 8     { } 9     public User(string userName, string psw)10     {11         this.UserName = userName;12         this.Psw = psw;13     }14     public virtual bool Login(string userName, string psw)15     {16         Console.WriteLine("操作Login,記錄日志");17         return true;18     }19     public virtual bool Login()20     {21         Console.WriteLine("操作Login,記錄日志");22         return true;23     }24     public virtual bool Exsit()25     {26         Console.WriteLine("操作Exsit,記錄日志");27         return true;28     }29 }

 

  • 具體用戶類Admin
 1     //從User中繼承Admin類,Admin類型有自己特有的一些操作,重寫父類中的操作,統一先執行父類中的操作 2     public class Admin : User 3     { 4         public Admin() 5             : base() 6         { 7  8         } 9         public Admin(string userName, string psw)10             : base(userName, psw)11         { 12 13         }14         public override bool Login()15         {16             if (base.Login())17             {18                 Console.WriteLine("操作Admin.Login");19                 return true;20             }21             return false;22         }23         public override bool Login(string userName, string psw)24         {25             if (base.Login(userName, psw))26             {27                 Console.WriteLine("操作Admin.Login");28                 return true;29             }30             return false;31         }32         public override bool Exsit()33         {34             if (base.Exsit())35             {36                 Console.WriteLine("操作Admin.Exsit");37                 return true;38             }39             return false;40         }41     }

 

  • 具體用戶類Visitor
 1     public class Visitor: User 2     { 3         //從User中繼承Visitor類,Visitor類型有自己特有的一些操作,重寫父類中的操作,統一先執行父類中的操作 4         public Visitor() 5             : base() 6         { 7  8         } 9         public Visitor(string userName, string psw)10             : base(userName, psw)11         { 12             13         }14         public override bool Login()15         {16             if (base.Login())17             {18                 Console.WriteLine("操作Visitor.Login");19                 return true;20             }21             return false;22         }23         public override bool Login(string userName, string psw)24         {25             if (base.Login(userName, psw))26             {27                 Console.WriteLine("操作Visitor.Login");28                 return true;29             }30             return false;31         }32         public override bool Exsit()33         {34             if (base.Exsit())35             {36                 Console.WriteLine("操作Visitor.Exsit");37                 return true;38             }39             return false;40         }41     }

 

  • 實例化用戶的靜態類UserFactory
 1     //靜態的User自成類,根據輸入信息,生成相應的實例,每個實例都有User中定義的屬性和方法 2     public static class UserFactory 3     { 4         public enum UserType 5         {  6             Admin, 7             Visitor 8         } 9         public static User CreateUser(UserType ut)10         {11             User user = null;12             switch (ut)13             {14                 case UserType.Admin:15                     user = new Admin();16                     break;17                 case UserType.Visitor:18                     user = new Visitor();19                     break;20             }21             return user;22         }23         public static User CreateUser(UserType ut, string userName, string psw)24         {25             User user = null;26             switch (ut)27             {28                 case UserType.Admin:29                     user = new Admin(userName, psw);30                     break;31                 case UserType.Visitor:32                     user = new Visitor(userName, psw);33                     break;34             }35             return user;36         }37     }

 

  • 說明

  在IUser接口中定義幾個用戶該有的方法,然后新建一個抽象類,去實現這個接口,將抽象類中的將實現的方法定義為可重載的,新建兩個類型去繼承User,則兩個新的類型要調用父類方法后編寫自己的方法。

  使用實例化用戶的靜態類UserFactory時,傳入用戶的類型,返回合適的實例化對象。

 

  相关解决方案