`
jdlsfl
  • 浏览: 159772 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ASP.NET教程:抽象工厂模式(C#)

阅读更多

抽象工厂模式向客户端提供一个接口,使得客户端在不必指定具体类型的情况下,创建多个产品族中的对象。本文采取的仍然是接着以前的那个快餐店的例子。

现在,快餐店经常良好,逐渐发展壮大,为了适合不同地方人的饮食习惯,创建了两大系列(相当于产品族)快餐,北方系列和南方系列。每个系列分别由一个大厨掌勺。

抽象工厂<nobr oncontextmenu="return false;" id="key5" onmousemove="kwM(5);" onmouseover="kwE(event,5, this);" onclick="return kwC();" target="_blank" onmouseout="kwL(event, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline">模式</nobr>对新的产品族支持开闭原则,但对新的产品不支持开闭原则。例如增加新的产品族,如增加<nobr oncontextmenu="return false;" id="key2" onmousemove="kwM(2);" onmouseover="kwE(event,2, this);" onclick="return kwC();" target="_blank" onmouseout="kwL(event, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline">美国</nobr>系列快餐(相当于增加了一个产品族),则只要从每个产品接口继承一个相应美国系列产品即可,不需要更改已有的代码。但如果增加新产品,比如增加了“馒头”这个产品,则它是不支持开闭原则的,因为你要在厨师接口中,增加返回“馒头”的方法,这就要修改已存在的接口,而修改了上层接口,继承此接口的具体类也要随之改变。

使用抽象工厂模式的条件:
1 一个<nobr oncontextmenu="return false;" id="key3" onmousemove="kwM(3);" onmouseover="kwE(event,3, this);" onclick="return kwC();" target="_blank" onmouseout="kwL(event, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline">系统</nobr>不应依赖于产品如何被创建,组合和表达的细节。
2 有多个产品族,而系统只消费其中一个族中的产品
3 同属于一个产品族的产品是在一起使用的。
4 系统提供一个产品的库,所有产品都是以同样的接口实现。

看下面的C#实现:

namespace ConsoleApplication1
{
    /// <summary>
    /// 抽象工厂模式示例
    /// </summary>
    class AbstractFactory
    {


        //定义厨师的抽象工厂
        public interface Chef
        {
            //这里定义厨师的公共操作
            //返回抽象面条
            Noodle MakeNoodle();
            //返回抽象米饭
            Rice MakeRice();
            //返回抽象面包
            Bread MakeBread();
        }


        //定义北方厨师,实现厨师接口
        class NorthChef:Chef
        {
            public Noodle MakeNoodle()
            {
                Console.WriteLine("\n<nobr oncontextmenu="return false;" id="key0" onmousemove="kwM(0);" onmouseover="kwE(event,0, this);" onclick="return kwC();" target="_blank" onmouseout="kwL(event, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline">制作</nobr>北方面条...");
                Noodle noodle=new NorthNoodle();
                return noodle;
            }
            public Rice MakeRice()
            {
                Console.WriteLine("\n制作北方米饭...");
                Rice rice=new NorthRice();
                return rice;
            }
            public Bread MakeBread()
            {
                Console.WriteLine("\n正在制作北方面包..");
                Bread bread=new NorthBread();
                return bread;
            }
        }

        //定义南方厨师,实现厨师接口
        class SouthChef:Chef
        {
            public Noodle MakeNoodle()
            {
                Console.WriteLine("\n正在制作南方面条。。。");
                Noodle noodle=new SouthNoodle();
                return noodle;
            }
            public Rice MakeRice()
            {
                Console.WriteLine("\n正在制作南方米饭。。。");
                Rice rice=new SouthRice();
                return rice;
            }
            public Bread MakeBread()
            {
                Console.WriteLine("\n正在制作南方面包。。。");
                Bread bread=new SouthBread();
                return bread;
            }
        }

        //定义面条产品
        public interface Noodle
        {
        //这里定义面条的公共操作
        }

        class NorthNoodle:Noodle
        {
            public NorthNoodle()
            {
                Console.WriteLine("\n一碗地道的北方面条产生了");
            }
        }

        class SouthNoodle:Noodle
        {
            public SouthNoodle()
            {
                Console.WriteLine("\n一碗地道的南方面条产生了");
            }
        }

        //定义米饭产品
        public interface Rice
        {
        //这里定义米饭的公共操作
        }

        class NorthRice:Rice
        {
            public NorthRice()
            {
                Console.WriteLine("\n一碗地道的北方米饭产生了");
            }
        }

        class SouthRice:Rice
        {
            public SouthRice()
            {
                Console.WriteLine("\n一碗地道的南方米饭产生了");
            }
        }


        //定义面包
        public interface Bread
        {
        //这里可以定义一些面包的公共操作
        }

        class NorthBread:Bread
        {
            public NorthBread()
            {
                Console.WriteLine("\n一个地道的北方面包产生了");
            }
        }

        class SouthBread:Bread
        {
            public SouthBread()
            {
                Console.WriteLine("\n一个地道的南方面包产生了");
            }
        }

        /// <summary>
        /// <nobr oncontextmenu="return false;" id="key4" onmousemove="kwM(4);" onmouseover="kwE(event,4, this);" onclick="return kwC();" target="_blank" onmouseout="kwL(event, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline">应用</nobr>程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            //针对接口编程,创建对象尽量返回上层接口,避免使用具体类
            //下面隐藏了具体的创建各种面条,米饭和面包的过程
            Console.WriteLine("\n-------------北方厨师-------------------\n");

            Chef northChef=new NorthChef();
            northChef.MakeNoodle();
            northChef.MakeRice();
            northChef.MakeBread();

            Console.WriteLine("\n-------------南方厨师-------------------\n");

            Chef southChef=new SouthChef();
            southChef.MakeNoodle();
            southChef.MakeRice();
            southChef.MakeBread();

            Console.ReadLine();
        }
    }
}

 

分享到:
评论

相关推荐

    .net 三层 抽象工厂

    在`.NET`中,可以使用C#语言实现抽象工厂模式,利用接口和抽象类来定义和实现各个层次的对象。同时,可以利用依赖注入框架(如Autofac、Unity或Ninject)来管理工厂的实例,进一步提高代码的灵活性和测试性。 总结...

    ASP.NET(C#)抽象工厂实例

    ASP.NET和C#是开发Web应用程序的常用技术组合,其中C#是一种面向对象的编程语言,而ASP.NET是一个用于构建动态网站、Web应用和Web服务的...深入研究这些代码,可以更好地理解如何在ASP.NET和C#环境中应用抽象工厂模式。

    (ASP)抽象工厂模式源码

    在本实例中,我们将深入探讨如何在ASP中应用抽象工厂模式。 首先,我们来看抽象工厂模式的基本结构。抽象工厂通常包含一个抽象工厂接口(Abstract Factory),这个接口定义了一系列创建产品的方法。然后,有一系列...

    Asp.net+jQuery+HttpHandler+抽象工厂+七层架构=经典实例

    在Asp.net项目中,抽象工厂可以用于数据库连接、日志记录、邮件服务等跨层的服务创建,使得系统更加灵活,易于扩展和维护。 【七层架构】 七层架构通常指的是网络通信的OSI模型(开放系统互连模型),包括物理层、...

    asp.net校园网站源码

    在ASP.NET项目中,工厂模式可以用来抽象对象的创建过程,使得代码更加灵活,易于替换或扩展。例如,在校园网站中,可能有一个用户工厂类,用于创建和管理不同的用户类型(如学生、教师和管理员)。 这个校园网站...

    .NET抽象工厂模式的三层架构案例

    .NET抽象工厂模式在三层架构中的应用是一个典型的软件设计模式实践,尤其在开发复杂的企业级应用程序时,这种模式显得尤为重要。三层架构是一种常见的软件分层结构,主要包括表现层(UI)、业务逻辑层(BLL)和数据...

    ASP.NET设计模式

    本文将深入探讨几种在ASP.NET中常见的设计模式,包括Abstract Factory(抽象工厂)、Adapter(适配器)、Bridge(桥接)和Decorator(装饰)模式。 1. 抽象工厂模式(Abstract Factory): 抽象工厂模式提供一个...

    奉上2本C#教程:C#.NET立即上手教程+完全讲解C#

    7. **ASP.NET**:用于开发Web应用的技术,包括MVC模式和Web Forms。 8. **单元测试**:理解测试驱动开发(TDD),使用NUnit等工具编写单元测试。 9. **调试技巧**:学习使用Visual Studio或其他IDE进行调试,查找并...

    asp.net工厂模式加三层写的酒店管理系统

    《ASP.NET结合工厂模式构建的酒店管理系统详解》 在软件开发领域,ASP.NET是一种广泛使用的Web应用程序框架,它由微软公司开发,旨在简化Web应用的创建和维护。结合工厂模式,我们可以构建出更加灵活、可扩展的系统...

    asp.net __ACCPBBS系统

    在学习和分析ACCPBBS系统的过程中,除了关注抽象工厂模式的应用,我们还需要理解ASP.NET Web应用程序的生命周期、C#编程基础、ADO.NET数据访问技术,以及.NET框架的核心概念。这些知识点都是构建高效、稳定的Web应用...

    三层架构抽象工厂示例(源代码)

    4. 如何利用抽象工厂模式在ASP.NET项目中创建和管理数据访问对象,以支持不同数据库系统的切换。 5. 实际应用中,如何根据项目需求调整和优化抽象工厂的实现。 通过深入理解并实践这个示例,你将能够更好地运用三层...

    asp.net c#面向对象虚拟工厂程序

    在这个“asp.net c#面向对象虚拟工厂程序”中,我们将探讨C#中的面向对象特性以及如何结合ASP.NET来实现三层架构。 首先,面向对象编程的核心概念包括封装、继承、多态和抽象。在C#中,我们通过类(Class)来定义...

    三层架构抽象工厂模式说明文档汇总

    三层架构和抽象工厂模式是软件开发中常见的设计模式和技术架构,尤其在C#和ASP.NET应用中被广泛采用。下面将详细阐述这两种概念及其在实际项目中的应用。 **三层架构(Three-Tier Architecture)** 三层架构是一种...

    2款代码生成器(asp.net数据库业务以及项目工厂模式 和层结构)

    对于"2款代码生成器(asp.net数据库业务以及项目工厂模式 和层结构)"这个主题,我们将深入探讨这两款工具如何帮助开发者构建ASP.NET应用程序,特别是涉及到数据库交互、业务逻辑和设计模式的应用。 首先,ASP.NET是...

    asp.net C#设计模式源代码

    在ASP.NET MVC中,视图引擎的选择就是抽象工厂模式的应用。 4. **建造者模式(Builder)**:将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在数据库实体构建或XML序列化时,我们可以看到...

    C# asp.net抽象工厂 简单登录页

    对于初学者来说,理解和掌握一种设计模式,并非易事,网上有些复杂点的程序,看懂和理解需要很长的时间,这个简单的抽象工厂练习,希望能帮助初学者了解抽象工厂并且在VS中配置它。当然本人能力有限,有不合理的地方...

    怎样建sdp.net工厂模式

    在.NET框架下,我们可以利用C#语言和ASP.NET技术来实现工厂模式。本文将详细讲解如何在ASP.NET项目中构建一个SDP(Software Development Process,软件开发过程)工厂模式。 首先,理解工厂模式的基本概念。工厂...

    C# MySchool 抽象工厂,三层架构模式,含开发文档

    【C# MySchool 抽象工厂与三层架构模式详解】 在C#编程中,`抽象工厂`模式是一种设计模式,它提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在`MySchool`项目中,抽象工厂可能被用来创建...

    c#,.net 程序员常见面试题大全(含答案)

    - **ASP.NET**:深入理解Web应用开发,包括MVC模式和Web Forms。 3. **LINQ(Language Integrated Query)**: - **查询表达式与方法语法**:熟悉两种不同的LINQ查询方式,以及如何在数据库、集合和其他数据源上...

    一扬开源新闻静态生成系统(ASP.NET)

    3、设计模式采用的是抽象工厂的模式,有需要可以比较顺利地把数据库迁移到Access数据库 安装说明: 1、在SQLServer2005中附加文件夹Data内的数据库 2、更改WebConfig文件中数据库的链接。 如需帮助,请加QQ:...

Global site tag (gtag.js) - Google Analytics