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. pro*c添加SQLCHECK后编译报错PLS-S-00201

    如果在pro*c中调用数据库了里的函数,就需要在proc的cfg配置文件中添加一行: SQLCHECK=SEMANTICS 但是添加之后又会出现PLS-S-00201错误,原因在与添加SQLCHECK ...

  2. JavaScript深入浅出4-对象

    慕课网教程视频地址:Javascript深入浅出 对象的结构:包含一系列无序的属性,每个属性都有字符串key和对应的值 创建对象:对象字面量.new/原型链.Object.create 对象的属性操作 ...

  3. JavaScript深入浅出2-表达式和运算符

    慕课网教程视频地址:Javascript深入浅出 表达式是指能计算出值的任何可用程序单元 原始表达式:常量.直接量 3.14,“test” 关键字 null,this 变量 i,k,j 表达式含:原始 ...

  4. tfw格式图解

    话不多说,直接看图. 上图中的UV坐标,实际上只的是图像的 横向坐标 和 纵向坐标 .即图像的行和列坐标. 对于图上任意一个像素点(col,row)这个坐标,换算其地理坐标就十分简单. GeoX = ...

  5. Dom初

    DOM基础 •什么是DOM •浏览器支持情况 lDOM节点 •childNodes  nodeType –获取子节点 <!DOCTYPE html PUBLIC "-//W3C//DT ...

  6. OLA音频变速算法的仿真与剖析

    前段时间,在尝试音乐节拍数的提取时,终于有了突破性的进展,效果基本上比市面上的许多商业软件还要好,在作节拍数检测时,高频信息作用不大, 通过重采样减小运算量.重采样让我想起了在学校里面做的变速变调算法 ...

  7. 1个简单的Log

    #pragma once #include <windows.h> #include <process.h> class CLogger { public: static CR ...

  8. phpcms评论框iframe无法自适应问题

    问题背景: 之前用友言的时候改过网站的ip地址,改成127开头的了.但是协同开发的时候别人用的还是localhost. 结果在用评论的时候iframe死活不能自适应,看了一下源代码v9本身已经写过if ...

  9. saltstack/salt的state.sls的使用

    SLS(代表SaLt State文件)是Salt State系统的核心.SLS描述了系统的目标状态,由格式简单的数据构成.这经常被称作配置管理 首先,在master上面定义salt的主目录,默认是在/ ...

  10. 【GoLang】panic defer recover 深入理解

    唉,只能说C程序员可以接受go的错误设计,相比java来说这个设计真的很差劲! 我认为知乎上说的比较中肯的: 1. The key lesson, however, is that errors ar ...