MVC基础知识 – 1.抽象工厂模式
问题:在List.aspx里怎么new一个业务层?
2.1.再在 02SBLL 解决方案里建一个类库 BLL_Tow,也有一个 Users.cs
2.3.因为BLL和BLL_Tow里的Users.cs都实现了IBLL.IUser
1.调用规则
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
2.2.建立一个工厂
根据问题,void的类型问题
2.3.因为BLL和BLL_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就能实现抽象工厂模式
2.4.因为只是硬编码写死的,运行时改变不了,所以应该把参数写到配置文件 web.config 里面
BLLFactory/BLLAbsFactory.cs
List.aspx
3.抽象工厂
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();
}
}
}
MVC基础知识 – 1.抽象工厂模式的更多相关文章
- java设计模式(三)--抽象工厂模式
转载:http://zz563143188.iteye.com/blog/1847029 前面的工厂方法模式虽然清晰,但还是感觉有些繁琐,通常使用的还是抽象工厂模式. 工厂方法模式有一个问题就是,类的 ...
- .NET抽象工厂模式微理解--教你在项目中实现抽象工厂
.NET抽象工厂模式微理解--教你在项目中实现抽象工厂 最近在学习MVC,对于MVC里面的一些项目上的东西都和抽象模式有关,今天就微说明一下个人对于抽象工厂模式的理解,以方便学习MVC及工厂模式相关的 ...
- 抽象工厂模式(Java与Kotlin版)
前文推送 设计模式 简单工厂模式(Java与Kotlin版) 工厂方法模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操 ...
- headfirst设计模式(5)—工厂模式体系分析及抽象工厂模式
先编一个这么久不写的理由 上周我终于鼓起勇气翻开了headfirst设计模式这本书,看看自己下一个设计模式要写个啥,然后,我终于知道我为啥这么久都没写设计模式了,headfirst的这个抽象工厂模式, ...
- 重学 Java 设计模式:实战抽象工厂模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!
- 大话设计模式C++版——抽象工厂模式
前面说过,简单工厂模式是最基础的一种设计模式,那以工厂命名的设计模式就是23种设计模式中最多的一种,他们一脉相承,一步一步进化而来,这里就是其中的最后一种——抽象工厂模式(Abstract Facto ...
- php抽象工厂模式的研究
上一节理解了工厂模式.其代码原理如下: <?php abstract class ApptEncoder{ abstract function encode(); } class BloggsA ...
- 抽象工厂模式和autofac的使用总结
抽象工厂模式和依赖注入的使用目的都是降低对象直接依赖耦合关系,应该说依赖注入是抽象工厂模式的一种升华,功能更强大. 说到抽象工厂的模式,一般都要先解释下简单工厂,简单工厂就是将对象的实例化抽取出来形成 ...
- php设计模式之抽象工厂模式
之前总结了一下工厂模式,其实准确地说是简单 工厂模式,在它的基础上再进行抽象就可以得到一种新的模式:抽象工厂模式. 专业一点的定义为: 抽象工厂模式(Abstact Factory)是一种常见的软件设 ...
随机推荐
- Python验证Url地址的正则表达式
如下是django中做url验证的正则表达式: regex = re.compile( r'^(?:http|ftp)s?://' # http:// or https:// r'(?:(?:[A-Z ...
- [POJ1328]Radar Installation
[POJ1328]Radar Installation 试题描述 Assume the coasting is an infinite straight line. Land is in one si ...
- 他们在军训,我在搞 OI(Ending)
Day 7 上午看看数学书,老师让我把导数相关的概念学了.这也没有多高大上,就是一坨公式需要背,什么 (a)' = 0 啦,什么 (xn)' = n·xn-1 啦,什么 sin'(x) = cos(x ...
- 第3次作业,c语言
<C语言程序设计>实验报告 学 号 160809201 姓 名 王浩然专业.班 计科16-2班 学 期 2016-2017 第1学期 指导教师 黄俊莲 ...
- Github如何删除repository(仓库)
首先就是你的Github主页了. 第二步点击进入一个repository(仓库) 第三步点击右上的setting 将此页面滑动到最下面找个这个 点击删除即可!
- 汉诺塔(河内塔)算法 ----C语言递归实现
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子, 在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺 ...
- mysql 查询某个日期时间段,每天同一时间段的数据
mysql 查询某个日期时间段,每天同一时间段的数据: SELECT * FROM t_a01_eltable WHERE DATE_FORMAT(acqtime,'%Y-%m-%d')>='2 ...
- tornado 非阻塞方法
http://sebastiandahlgren.se/2014/06/27/running-a-method-as-a-background-thread-in-python/
- CentOS完美搭建Redis3.0集群并附测试
线上的统一聊天和推送项目使用的是redis主从,redis版本2.8.6 redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口:slaveof ...
- We will be discontinuing the Nitrous Development Platform and Cloud IDE on November 14th, 2016.
我表示我很难过 Nitrous We will be discontinuing the Nitrous Development Platform and Cloud IDE on November ...