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)是一种常见的软件设 ...
随机推荐
- xcode免证书开发
工程和target的code sign 选择 ios developer 工程的team选择为none就ok 推送测试 或者 正式发布的时候要改回来, 有一个严重的缺陷, 就是打包出来的ipa程序有时 ...
- js 判断鼠标进去方向
function fx(id){ var obj= document.getElementById(id); var fun=function(e){ var w=obj.offsetWidth; v ...
- Java反射-方法(Method)
工作了三年,第二次使用反射! 遇到的问题描述: 多个页面查询后,返回的List中的对象属性为“.00”,页面显示不友好. 查询原因是因为查询数据的SQL为:to_char(a.applyAmount, ...
- class training
实验3-1 分别使用while循环.do while循环.for循环求 (即求1+2+3+ --+100). 参考: 源码 方法一#include<stdio.h> int main(){ ...
- Android6.0以后动态增加权限
private void test() throws IOException { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { in ...
- linux 下恢复后台程序的方法
一直以为这个东西不怎么重要,所以一直没怎么去记,已经第三次百度了,不想再有第四次. 如果你在终端下运行一个程序,如果这个程序正在运行,我们可以用 ctrl + z 的命令将这个程序挂到后台. desk ...
- PHP输出控制(Output Control)函数
ob_start 此函数将打开输出缓冲.当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中. 内部缓冲区的内容可以用 ob_get_contents() ...
- Isomorphic Strings
Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...
- MVC Create
本文介绍如何在MVC里往数据库中插入新的记录. 这里用到的数据表如下: Employees Step 1: 在Control文件里加入method public ActionResult Create ...
- POJ 2769
http://poj.org/problem?id=2796 题意:求n个数的和乘以这n个数中的最小值的积最大的数,以及其范围. 思路:求每一个数两边的比其大的数的和,再乘以这个数.还有一个范围,用单 ...