程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> [設計模式].01.簡單工廠模式,設計

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

編輯:C#入門知識

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


  • 用戶接口
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 }

 

  • 具體用戶類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時,傳入用戶的類型,返回合適的實例化對象。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved