码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-02-12 17:47:42      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

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

 

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

标签:

原文地址:http://www.cnblogs.com/a2htray/p/4288280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!