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.调用规则

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.抽象工厂模式的更多相关文章

  1. java设计模式(三)--抽象工厂模式

    转载:http://zz563143188.iteye.com/blog/1847029 前面的工厂方法模式虽然清晰,但还是感觉有些繁琐,通常使用的还是抽象工厂模式. 工厂方法模式有一个问题就是,类的 ...

  2. .NET抽象工厂模式微理解--教你在项目中实现抽象工厂

    .NET抽象工厂模式微理解--教你在项目中实现抽象工厂 最近在学习MVC,对于MVC里面的一些项目上的东西都和抽象模式有关,今天就微说明一下个人对于抽象工厂模式的理解,以方便学习MVC及工厂模式相关的 ...

  3. 抽象工厂模式(Java与Kotlin版)

    前文推送 设计模式 简单工厂模式(Java与Kotlin版) 工厂方法模式(Java与Kotlin版) Kotlin基础知识 Kotlin入门第一课:从对比Java开始 Kotlin入门第二课:集合操 ...

  4. headfirst设计模式(5)—工厂模式体系分析及抽象工厂模式

    先编一个这么久不写的理由 上周我终于鼓起勇气翻开了headfirst设计模式这本书,看看自己下一个设计模式要写个啥,然后,我终于知道我为啥这么久都没写设计模式了,headfirst的这个抽象工厂模式, ...

  5. 重学 Java 设计模式:实战抽象工厂模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!

  6. 大话设计模式C++版——抽象工厂模式

    前面说过,简单工厂模式是最基础的一种设计模式,那以工厂命名的设计模式就是23种设计模式中最多的一种,他们一脉相承,一步一步进化而来,这里就是其中的最后一种——抽象工厂模式(Abstract Facto ...

  7. php抽象工厂模式的研究

    上一节理解了工厂模式.其代码原理如下: <?php abstract class ApptEncoder{ abstract function encode(); } class BloggsA ...

  8. 抽象工厂模式和autofac的使用总结

    抽象工厂模式和依赖注入的使用目的都是降低对象直接依赖耦合关系,应该说依赖注入是抽象工厂模式的一种升华,功能更强大. 说到抽象工厂的模式,一般都要先解释下简单工厂,简单工厂就是将对象的实例化抽取出来形成 ...

  9. php设计模式之抽象工厂模式

    之前总结了一下工厂模式,其实准确地说是简单 工厂模式,在它的基础上再进行抽象就可以得到一种新的模式:抽象工厂模式. 专业一点的定义为: 抽象工厂模式(Abstact Factory)是一种常见的软件设 ...

随机推荐

  1. View的3种测量模式

    EXACTLY:表示设置了精确的值,一般当childView设置其宽.高为精确值.match_parent时,ViewGroup会将其设置为EXACTLY: AT_MOST:表示子布局被限制在一个最大 ...

  2. 剑指Offer 二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   思路: 后续遍历数组的尾部为根节点,前面的部分 ...

  3. PHP中九大缓存技术总结

    PHP缓存包括PHP编译缓存和PHP数据缓存两种.PHP是一种解释型语言,属于边编译边运行的那种.这种运行模式的优点是程序修改很方便,但是运行效率却很低下.PHP编译缓存针对这种情况做改进处理,使得P ...

  4. 怎样在myEclipse中使用debug调试程序?

    怎样在myEclipse中使用debug调试程序? 最基本的操作是:     1.首先在一个java文件中设断点,然后debug as-->open debug Dialog,然后在对话框中选类 ...

  5. Discovering versions from the identity service failed when creating the password plugin.

    If you are behind the proxy, then you have to set no_proxy environmental variable for your localhost ...

  6. Git – Fast Forward 和 no fast foward

    Git 很是强大,在体验过rebase的华丽之后,再次发现之前在TFS上遇到的问题一下都有解了.但也印证了Git深入并非易事.这篇就谈下一个容易迷糊的概念:Fast forward. Fast-For ...

  7. (转) Docker swarm 之介绍与使用

    今天,在站内看到一篇关于Docker Swarm 的文章,非常好,在这里转过来,方便日后查阅 :) 原贴链接: http://www.cnblogs.com/rio2607/p/4445968.htm ...

  8. Python之队列queue模块使用 常见问题与用法

    python 中,队列是线程间最常用的交换数据的形式.queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外. 1. 阻塞模式 import queue q = queu ...

  9. 使用Java中的IO流,把A文件里的内容输入到B文件中

    我们先创建两个文本文件,out.txt和in.txt,在out.txt中输入"Hello World",然后使用FileInputStream把字符串读取出来,再使用FileOut ...

  10. ios 把已经点击过的UILocalNotification 从系统的通知中心现实中移除

    在ios7 上一个uilocalnotification在中心现实后,点击该消息,程序被唤醒了,但是该通知没有被移除.用了以下的代码后可以解决这个问题         UIApplication.sh ...