1 //定義一個用戶該有的操作 2 public interface IUser 3 { 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 }
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 }
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 }
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時,傳入用戶的類型,返回合適的實例化對象。