设计模式----抽象工厂学习总结(图文说明)

 
抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
 
1.抽象工厂(抽象类) 生产(抽象方法) 抽象产品(接口类)
2.具体工厂 实现(继承) 抽象工厂 ,并 生产 具体产品
3.具体产品 实现(继承) 抽象产品
4.用户(BLL)只能访问 抽象工厂 和 抽象产品 ,但知道有哪些具体工厂以供选择
5.抽象工厂存在一个静态的方法,用于选择具体工厂
 
关系图:

 
 
抽象工厂实现步骤:
1.创建Model 类库,并创建实体类
 
2.创建IDAL类库,引用Model类库,并创建公共的接口类(抽象产品),在类中定义用户(BLL)需要用到的方法,返回值类型为实体类,注意:该类中的方法不能写访问修饰符
 
3.创建Factory类库,引用IDAL类库,并创建AbstractFactory类(抽象工厂),创建 生产(抽象产品)的公共抽象方法,返回值类型为接口类(抽象产品)
 
4.在Factory类库中,创建具体工厂类,继承AbstractFactory类(具体工厂实现抽象工厂),并实现AbstractFactory类中定义的抽象方法,在方法的返回值为实体类的实例
 
5.在Web配置文件中,添加一个appSettings标签,然后在appSettings标签中添加一个add标签,在标签中设置key属性和value属性,key属性是设置在类中调用配置文件的信息的下标,value属性是设置选择具体工厂时的具体工厂路径,一般格式是:具体工厂所在的命名空间名+ .(点)+具体工厂类名
如:
<appSettings>
<add key="FactoryName" value="Factory.SqlFactory"/>
</appSettings>
 
6.在AbstractFactory类中,引用System.Configuration和System.Reflection 命名空间,创建选择具体工厂的静态方法,返回值为抽象工厂类(即AbstractFactory类),在方法体中
1.从配置文件中获取具体工厂的类名,
如: string factoryName = ConfigurationManager.AppSettings["FactoryName"];
2. 使用反射,根据类名获取该类程序集
如: Assembly assembly = typeof(AbstractFactory).Assembly;
3. 根据具体工厂类名,创建一个具体工厂实例,并返回该实例
如: (AbstractFactory)assembly.CreateInstance(factoryName)
 
7.创建BLL类库,引用Model、IDAL、Factory类库,创建一个业务类
1.调用AbstractFatory类的选择具体工厂的静态方法,并声明一个AbstractFactory类(抽象工厂)的对象,用来接收该方法返回的实例
2.声明一个公共的方法,用于实现具体产品类中定义好方法
3.在方法体中调用步骤1中声明的AbstractFactory类对象的生产抽象产品方法,并声明一个抽象产品(接口类)的对象,用来接收生产抽象产品方法返回的实例
4.调用抽象产品对象中的方法
如:
AbstractFactory factory = AbstractFactory.SelectFactory();
 
public User GetUserByID(int ID)
{
IUserService userService=factory.CreateUserService();
return userService.GetUserByID(ID);
}
 
8.创建具体产品类库,如SqlDAL,引用Model、IDAL类库,创建用于实现IDAL类库中的接口类(抽象产品)的类(具体产品),和IDAL类库中的接口类一一对应(即接口类有几个就要创建几个对应的实现类),实现接口类中定义的方法。如:连接数据库或对数据库中的数据进行增、删、查、改等操作的具体实现步骤。

转载于:https://www.cnblogs.com/chenchunqiu/archive/2012/11/07/2759631.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值