首页 > 代码库 > C# 抽象工厂模式
C# 抽象工厂模式
抽想工厂类创建方法,以下是一个多年前写的例子
1,提供一个供外部访问的属性
2,构造函数初始化该属性
3,创建子类工厂需要继承实现的业务类的属性
public abstract class BLLFactory { public static BLLFactory Instance { get; private set; } static BLLFactory() { string typeName = ConfigurationManager.AppSettings["BLL"];//配置文件中BLL的值为HomeFactory Type t = Type.GetType(typeName, true, true); object obj = Activator.CreateInstance(t); Instance = (BLLFactory)obj; } //用户管理模块业务的接口 public abstract IUserBLL UserBLL { get; } //其他模块业务的接口 public abstract IOtherBLL OtherBLL { get; } //.... }
4,IUserBLL 接口实现
public interface IUserBLL { /// <summary> /// 账号注册 /// </summary> /// <param name="user">用户基本信息</param> /// <returns>注册是否成功</returns> bool Register(UserDTO user); /// <summary> /// 账号登陆 /// </summary> /// <param name="user">账号/密码</param> /// <param name="ds">用户基本信息</param> /// <returns>登录是否成功</returns> bool Login(UserDTO user, ref DataTable dt); }
5,子类工厂 HomeFactory 实现
public class HomeFactory : BLLFactory { public override IUserBLL UserBLL { get { return new UserBLL(); } } public override IOtherBLL OtherBLL { get { return new OtherBLL(); } } //... }
6,UserBLL实现IUserBLL接口方法
public class UserBLL:IUserBLL { #region IUserBLL 成员 bool IUserBLL.Register(UserDTO user) { //代码实现逻辑 } bool IUserBLL.Login(UserDTO user, ref DataTable dt) { //代码实现逻辑 } #endregion }
7,IOtherBLL,OtherBLL可参考上面的 IUserBLL,UserBLL实现
这样实现的意义在于,可根据配置文件的设置灵活使用不同的BLLFactory实现工厂,就像是A工厂和B工厂他们都生产自行车,但A工厂和B工厂使用的配件和组装方法不一样
而我们的业务逻辑可能是A工厂使用sqlserver数据库,而B工厂使用Oracle数据库,但是都能实现获取业务数据的需求
8,调用方法
bool isOK = BLLFactory.Instance.UserDLL.Register(userDTO);
C# 抽象工厂模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。