MVC基础知识 – 1.抽象工厂模式

1.调用规则

2.简单工厂

    问题:在List.aspx里怎么new一个业务层?

    2.1.再在 02SBLL 解决方案里建一个类库 BLL_Tow,也有一个 Users.cs

    2.2.建立一个工厂

    2.3.因为BLL和BLL_Tow里的Users.cs都实现了IBLL.IUser

    2.4.因为只是硬编码写死的,运行时改变不了,所以应该把参数写到配置文件 web.config 里面

3.抽象工厂

 

1.调用规则

image

image

List.aspx

public partial class List : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//1.读取数据,通过业务层(业务接口层)
IBLL.IUsers iblluser = null;
//2.调用业务接口 读取数据
List<Model.Users> list = iblluser.GetList();
//3.根据数据生成HTML代码
Response.Write(list.Count());
}
}

无标题

2.简单工厂

 问题:在List.aspx里怎么new一个业务层?

//1.读取数据,通过业务层(业务接口层)
IBLL.IUsers iblluser = null;

   2.1.再在 02SBLL 解决方案里建一个类库BLL_Tow也有一个Users.cs

image

  2.2.建立一个工厂

image

根据问题,void的类型问题

image

  2.3.因为BLLBLL_Tow里的Users.cs都实现了IBLL.IUser

public class Users : IBLL.IUsers

所以

public class BLLAbsFactory
{
//void 该是什么类型呢?
//如果是BLL.Users, return new BLL_Tow.Users();就会报错
//反之,前面也会报错
//因为 BLL 和 BLL_Two 里 public class Users : IBLL.IUsers所以返回 IBLL.IUsers
public IBLL.IUsers GetBLLUser(string strType)
{
if (strType=="BLL")
{
return new BLL.Users();
}
else
{
return new BLL_Tow.Users();
}
}
}

List.aspx就能实现抽象工厂模式

image

 

2.4.因为只是硬编码写死的,运行时改变不了,所以应该把参数写到配置文件 web.config 里面

image

BLLFactory/BLLAbsFactory.cs

image

List.aspx

image

 

3.抽象工厂

抽象工厂3层模式

image

BLLFactory.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BLLFactory
{
/// <summary>
/// 业务抽象工厂
/// </summary>
public abstract class BLLFactory
{
/// <summary>
/// 根据配置文件 获取 实体业务工厂 对象
/// </summary>
/// <returns></returns>
public static BLLFactory GetFactory()
{
string strType = System.Configuration.ConfigurationManager.AppSettings["bllType"].ToString();
BLLFactory fac = null;
if (strType == "bll")
{
fac = new BLLFactory_A();
}
else if (strType == "bllTwo")
{
fac = new BLLFactory_Tow();
}
return fac;
}
public abstract IBLL.IUsers GetUsers();
public abstract IBLL.IMsg GetMsg();
}
}

BLLFactory_A.cs

namespace BLLFactory
{
/// <summary>
/// 负责生产业务 BLL 里的项目对象
/// </summary>
public class BLLFactory_A : BLLFactory
{
public override IBLL.IUsers GetUsers()
{
return new BLL.Users();
}

public override IBLL.IMsg GetMsg()
{
return new BLL.Msg();
}
}
}

BLLFactory_Tow.cs

namespace BLLFactory
{
/// <summary>
/// 负责生产业务 BLL_Tow 里的项目对象
/// </summary>
/// <remarks></remarks>
public class BLLFactory_Tow : BLLFactory
{
public override IBLL.IUsers GetUsers()
{
return new BLL_Tow.Users();
}

public override IBLL.IMsg GetMsg()
{
return new BLL_Tow.Msg();
}
}
}

新建一个web表示层

ListTow.aspx.cs

namespace Web
{
public partial class ListTow : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//通过抽象工厂的静态方法,读取配置文件,并获取一个实体工厂对象
BLLFactory.BLLFactory absBllFactory = BLLFactory.BLLFactory.GetFactory();


//1.读取数据,通过业务层(业务接口层) --使用 抽象工厂 的方法获取一个 实体产品
IBLL.IUsers iblluser = absBllFactory.GetUsers();
//2.调用业务接口 读取数据 ---通过抽象产品 调用业务方法
List<Model.Users> list = iblluser.GetList();
//3.根据数据生成HTML代码
Response.Write(list.Count());

IBLL.IMsg ibllMsg = absBllFactory.GetMsg(); //--使用 抽象工厂 的方法获取一个 实体产品
List<Model.Msg> listMsg = ibllMsg.GetMsgList();
}
}
}
原文地址:https://www.cnblogs.com/tangge/p/3366257.html