工厂模式{C#描述}
概述
在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?这就是我们要说的抽象工厂模式。
简而言之: 通过传入"类名", 创建不同的对象.
意图
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
类: CAdmin(管理员类), CUser(普通用户类)
接口: IUser(用户类)
关系: CAdmin(管理员类), CUser(用户类) 都实现 IUser接口
类: CAdmin(管理员类)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | namespace WebApplication1 { public class CAdmin:IUser { #region IUser 成员 public string GetName() { return "我是管理员, 小样敢乱发言逮捕!" ; } #endregion } } |
类: CUser(普通用户类)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | namespace WebApplication1 { public class CUser:IUser { #region IUser 成员 public string GetName() { return "我是普通用户!" ; } #endregion } } |
接口: IUser(用户类)
1 2 3 4 5 6 7 | namespace WebApplication1 { interface IUser { string GetName(); } } |
调用(实现部分):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //用户对象 protected void Button1_Click( object sender, EventArgs e) { Label1.Text = GetName( "WebApplication1.CUser" ); } //管理员对象 protected void Button2_Click( object sender, EventArgs e) { Label2.Text = GetName( "WebApplication1.CAdmin" ); } //得到名字, 当然还有简短的话 - - public string GetName( string className) { IUser user = (IUser)Assembly.Load( "WebApplication1" ).CreateInstance(className); return user.GetName(); } |