最经典介绍ASP.NET抽象工厂模式概念及用法 ~~~转转转转

最经典介绍ASP.NET抽象工厂模式概念及用法

抽象工厂模式向客户端提供一个接口,使得客户端在不必指定具体类型的情况下,创建多个产品族中的对象。本文采取的仍然是接着以前的那个快餐店的例子。
现在,快餐店经常良好,逐渐发展壮大,为了适合不同地方人的饮食习惯,创建了两大系列(相当于产品族)快餐,北方系列和南方系列。每个系列分别由一个大厨掌勺。
抽象工厂模式对新的产品族支持开闭原则,但对新的产品不支持开闭原则。例如增加新的产品族,如增加美国系列快餐(相当于增加了一个产品族),则只要从每个
产品接口继承一个相应美国系列产品即可,不需要更改已有的代码。但如果增加新产品,比如增加了“馒头”这个产品,则它是不支持开闭原则的,因为你要在厨师
接口中,增加返回“馒头”的方法,这就要修改已存在的接口,而修改了上层接口,继承此接口的具体类也要随之改变。
使用抽象工厂模式的条件:
1 一个系统不应依赖于产品如何被创建,组合和表达的细节。
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制作北方面条...");
                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>
        /// 应用程序的主入口点。
        /// </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();
        }
    }
}

最经典介绍ASP.NET抽象工厂模式概念及用法 ~~~转转转转

时间: 2024-10-09 00:02:32

最经典介绍ASP.NET抽象工厂模式概念及用法 ~~~转转转转的相关文章

设计模式在实际业务应用中的介绍之1——抽象工厂模式实现对数据库访问组件的封装

设计模式在实际业务应用中的介绍之1--抽象工厂模式实现对数据库访问组件的封装 基于C#打造的通用数据库访问组件 基于C#打造的通用数据库访问组件,完全支持开闭原则,设计上支持可扩展支持任意主流数据库,目前组件只实现了Oracle.MS SQL.MySQL三种库. 该组件实现简单.架构清晰,目前组件只包括5个类文件,兼容了三种数据库,组件实现采用了单例模式.工厂模式. 获取组件源码请入QQ群706224870,在群文件中下载.入群验证信息:codefc 下面简单描述下实现思路: 5个类文件如下:D

【JS设计模式】温习简单工厂模式、工厂方法模式、抽象工厂模式概念

注:空心箭头表示的是种继承关系,工厂类和产品类之间是一种依赖关系.是用箭头加虚线表示的,以下的模型图是用的实线是不正确(时间不够用,在这里我偷懒了.这个习惯不好,呵呵) 简单工厂模式(Simple Factory Pattern): 使用一个类(通常为单体)来创建实例;简单工厂模式也叫静态工厂方法模式(Static FactoryMethod Pattern). 接口的定义通常是以I开头标识符,在JS中未定义接口或抽象类的语法: var MacBikeFactory = { createBike

反射+抽象工厂模式

这里通过一个DEMO介绍反射配合抽象工厂模式的运用.大概业务背景就是在实际业务过程中,可能要替换数据库,具体代码如下: 1.User实体类 class User { private int id; private string name; public int Id { get { return id; } set { id = value; } } public string Name { get { return name; } set { name = value; } } } 2.操作U

Android源码中的抽象工厂---IPolicy

抽象工厂应用是很广的,在Android源码中,这个IPolicy就是一个简单的抽象工厂模式.下面分析一下IPolicy及其实现,以及创建的相关对象(源码基于5.0.0). 抽象工厂 意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. UML类图 通过继承抽象工厂,可以产生不同的产品系列 代码示例 abstract class AbsFactory{ public abstract AbsProductA createProduct1(); public abstract

简明 抽象工厂模式(3.1)

镇楼 抽象工厂模式(abstract factory pattern)较工厂方法模式强大之处,是一个工厂能够创建多个配套的产品. 日常生活中,抽象工厂模式比比皆是.例如服装厂可以生产配套的上衣/Tops.下装/Bottoms.电器公司如美的.海尔可以生产其品牌的冰箱.空调.电视机等. 抽象工厂模式的特点就是工厂接口中有两个以上的工厂方法. 例程 2-6 品牌公司 package creational.factory.abstractFactory; public class NikeFactor

C#之三十九 抽象工厂模式

在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种"封装机制"来避免客户程序和这种"多系列具体对象创建工作"的紧耦合?这就是我们要说的抽象工厂模式. 重点: ?      抽象工厂模式概念 ?      抽象工厂模式的模型图 ?      抽象工厂模式访问多种数据库 预习功课: ?      什么是抽象工厂模式 ?  

ASP.NET:就抽象工厂模式的一些说明(图文并茂,举例说明)

最近再在做一套CMS,发现有组员对抽象工厂这一开发模式概念不清晰,应他们要求,这里我就简要说明下各层之间的关系,对抽象工厂模式有不明白的朋友可以看看,说的不对之处还请指出: 所谓的三层开发,无外乎: 数据访问层.业务逻辑层和显示层: 至于模型层(穿插3层,不在其中,若真要算,可以认为是数据访问层,但实质上是位于数据库和数据访问层之间): 而抽象工厂模式是在三层开发的基础上增加了一个工厂层和接口层,像我现在的项目就是这么几个类库:实体类库,接口类库,数据访问层类库,工厂类库,业务逻辑层类库和显示层

Asp.Net 设计模式 之 “工厂方法”即利用 接口 实现的抽象工厂

主要改动部分: /// <summary>    /// 6.创建工厂方法模式(抽象工厂:接口)    /// </summary>    interface IFactory    //父接口(父类工厂)    {        /// <summary>        /// 此父接口提供一个无参的函数方法        /// </summary>        /// <returns></returns>        Op

erlang与设计模式(二)——工厂、抽象工厂、建造者

Russell-X-Shanso 工厂模式.抽象工厂模式.建造者模式,均为创建类模式,其共有的设计思路主要在于根据情况理清并封装创建流程(创建进程.创建gen_server.组建record或maps等复合数据结构等).解耦.定向扩展等等. (注:由于这三个创建类模型解决的问题近似,面向对象语言中的解决方式也较为近似,因此我们放在一起来讨论:) 3.工厂模式( Factory Method ) (1)意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类