[設計模式].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時,傳入用戶的類型,返回合適的實例化對象。

时间: 2024-10-26 15:33:41

[設計模式].01.簡單工廠模式的相关文章

設計模式--抽象工廠模式

抽象工廠用例圖 代碼 class Program { static void Main(string[] args) { User user = new User(); Department dept = new Department(); IUser iu = DataAccess.CreateUser(); iu.Insert(user); iu.GetUser(1); IDepartment id = DataAccess.CreateDepartment(); id.Insert(dep

馬達控制、機器視覺及工業乙太網路交換器係工廠自動化不可或缺的三大環節

隨著亞洲人力雇用成本攀升,加上北美大力推行製造業回流政策,全球主要3C產品製造工廠以機器取代人工的需求已日益殷切,激勵歐美.日本和台灣工業設備大廠加緊研發機器手臂.機器人與產線自動化設備,因而帶動龐大的馬達控制.機器視覺和工業乙太網路解決方案導入需求. SoC FPGA整合可編程邏輯和多核CPU.DSP或軟核(Soft-core)MCU,兼具高速邏輯運算.即時控制與平行處理優點,可支援快速傅立葉轉換(FFT)等高階演算法,並縮減大量資料乘加運算的功耗.此外,其透過FPGA的軟體可編程特性,更有助

這個日曆戳一下,一天就往時了|這個設計了不得

俺們每日都為你舉薦幾個最近察覺的好設計.「這個設計了不得」的微信市民號上線啦,直爽搜new balance 580查「BestDesign」或者「Qthings」就能夠訂閱,留意俺們每天發覺的新奇好設計.Buzzifloat by Alain Gilles更少的原料體現著未有足夠的安閒度?在吉布提科隆國外工作家倶及裝備展( ORGATEC )上,盧旺達設計師 Alain Gilles 用為家私企業 BuzziSpace 所設計的極簡風座椅 Buzzifloat 給出了否認的解答.座椅的設計靈性出

組裝工廠設置IQC的目的

在電子組裝工廠的組織裡,一般都會有 IQC (Incoming Quality Control) 這個單位,台灣稱之為「入(進)料管控」,大陸稱之為「來料管控」,其最主要目的在攔檢所有買進材料是否符合圖面規格,以免不良零件直接進入生產線造成不良產出或甚至產線停產.這有點像是機場入境時的海關,用抽撿的方式檢查旅客行李,以防止有可能流入的違禁品,它雖然不能100%攔截所有有問題的零件,但至少可以有一個初步的關口攔截到部份有問題的零件. 我個人認為設置 IQC 可以有下列幾個目的: 預先釐清不良零件的

linux下c++實現簡單的生產者消費者隊列模式

引言 生產者消費者是一個經典的模式 利用生產者,消費者和緩衝區降低了生產者和消費者之間的的耦合度 便於對生產者和消費者的修改 下面記錄的是一個經典的單一生產者多消費者的模式 設計思路 以隊列做為緩衝區,實現產品的FIFO 生產者調用緩衝區的push函數,將產品加入緩衝區 消費者調用緩衝區的pop函數,將產品從緩衝區取出 因為生產者與消費者分屬於不同的線程,所以要設置鎖 類的聲明 class CacheQueue { private: /** * @brief 緩衝隊列 */ queue<int>

用JavaScript做一個簡單的計算器

今天繼續學習JavaScript,視頻講的確實挺差勁的.還是只能跟著W3School自己慢慢摸索著弄了.自己百度了一下,參考了一個大佬寫的一個簡單的計算器代碼.代碼能跑通,但是做出來的樣子實在是感覺太丑了.做完以後自己又把樣式重新寫了一遍.結果就變成這樣的了.下面就是今天的代碼: 1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>JSNo

簡單說就是設置一個搶

簡單說就是設置一個搶簡單說就是設置一個搶簡單說就是設置一個搶簡單說就是設置一個搶簡單說就是設置一個 http://p.sfacg.com/p/6283091/http://p.sfacg.com/p/6283093/http://p.sfacg.com/p/6283095/http://p.sfacg.com/p/6283097/http://p.sfacg.com/p/6283099/http://p.sfacg.com/p/6294193/http://p.sfacg.com/p/62895

設計模式具體應用

大话设计模式中的利用反射加抽象工厂的数据访问程序.先来看看反射技术的基本格式:--反射工廠 Assembly.Load(“程序集名称”).CreateInstance(“命名空间.类名称”); 只要在程序顶端写上using System.Reflection来引用Reflection,就可以采用反射工厂来克服抽象工厂模式的先天不足.下面我们来看通过反射技术实现不同数据库的访问程序. DataAccess类,用反射技术,取代了抽象工厂中的IFactory,SqlServerFactory和Acce

實戰設計模式之工厂方法模式

對於http請求原理的朋友應該了解IIS上後綴映射 /*当我们请求一个*.aspx的文件时,此时会映射到System.Web.UI.PageHandlerFactory类上进行处理,而对*.ashx的请求将映射到System.Web.UI.SimpleHandlerFactory类中(这两个类都是继承于IHttpHandlerFactory接口的)*/ 下面用一線圖來直觀的看一下 圖引用:http://www.cnblogs.com/zhili/p/FactoryMethod.html 為了更直