首页 > 用C#实现抽象工厂模式

用C#实现抽象工厂模式

 

大家都知道,在开发中,如果用好了某种模式,那效率……  

嘿嘿      我就不说了

进入正题吧:

以下都为源代码,可直接拷贝,然后自己研究

由于是讲解,所以只涉及基本的架构

 

项目名为:AbstractFactoryMode

 

1.建立抽象总工厂

using System;

using System.Collections.Generic;

using System.Text;

namespace AbstractFactoryMode

{

    ///



    /// 总工厂

    ///


    public abstract class AbstractFactory

    {

        public abstract AbstractUser CreateUser();

        public abstract AbstractBook CreateBook();

    }

}

 

 

2.建立子工厂(子工厂继承总工厂,实现抽象总工厂的抽象方法)

 

using System;

using System.Collections.Generic;

using System.Text;

namespace AbstractFactoryMode

{

    ///



    /// 一个具体的工厂

    ///


    public class ConcreteFactory : AbstractFactory

    {

        ///

        /// 子工厂,用来创造用户

        ///


        ///

        public override AbstractUser CreateUser()

        {

            //具体的产物

            return new User();

        }

        ///

        /// 子工厂,用来创造书籍

        ///


        ///

        public override AbstractBook CreateBook()

        {

            //具体的产物

            return new Book() ;

        }

    }

}

 

3.建立抽象产物,由具体的实体类继承

//user(用户)抽象产物

 

using System;

using System.Collections.Generic;

using System.Text;

namespace AbstractFactoryMode

{

    ///



    /// 抽象产物,写关于创造用户所需要的方法

    /// 此抽象产物可写成接口,实现效果一样

    ///


    public abstract class AbstractUser

    {

        ///

        /// 此方法用于创造用户

        ///


        public abstract void CreateUser();

        //以下还可以写很多方法

        //比如:

        //public abstract IList GetAllUser()--------得到所有用户

        //public abstract user GetUserById()-------根据id查询用户

        //public abstract user ModifyUserByName()----根据姓名修改用户

        //这些方法都可以在user类中实现

        //如果把此方法改为接口,那么user类中就 必须完全实现此抽象产物中的全部方法

    }

}

 

//book(书籍)抽象产物

 

using System;

using System.Collections.Generic;

using System.Text;

namespace AbstractFactoryMode

{

    ///



    /// 抽象产物,写关于创造书籍所需要的方法

    /// 此抽象产物可写成接口,实现效果一样

    ///


    public abstract class AbstractBook        

    {

        ///

        /// 此方法用与创造书籍

        ///


        public abstract void CreateBook();

        //以下还可以写很多方法

        //比如:

        //public abstract IList GetAllBook()--------得到所有书籍

        //public abstract book GetBookById()-------根据id查询书籍

        //public abstract book ModifyBookByName()----根据书名修改书籍

        //这些方法都可以在book类中实现

        //如果把此方法改为接口,那么book类中就 必须完全实现此抽象产物中的全部方法

      

    }

}

4.建立实体类,用于执行具体的操作,并继承对应的抽象产物

//user(用户)类

 

using System;

using System.Collections.Generic;

using System.Text;

namespace AbstractFactoryMode

{

    ///



    /// 具体的实现

    /// 继承产物ABstractUser

    ///


    public class User:AbstractUser

    {

        public override void CreateUser()

        {

            Console.WriteLine("用户创建成功");

        }

/*      public override IList GetAllUser()

        {

            //写实现方法

            //return null;

        }

        public override user GetUserById()

        {

            //写实现方法

            //return null;

        }

        public override user ModifyUserByName()

        {

            //写实现方法

            //return null;

        }*/

    }

}

 

//book(书籍)类

 

using System;

using System.Collections.Generic;

using System.Text;

namespace AbstractFactoryMode{

    ///



    /// 具体的实现

    /// 继承产物ABstractBook

    ///


    public class Book:AbstractBook

    {

        //重写CreateBook方法

        public override void CreateBook()

        {

            Console.WriteLine("书籍创建成功");

        }

/*      public override IList GetAllBook()

        {

            //写实现方法

            //return null;

        }

        public override Book GetBookById()

        {

            //写实现方法

            //return null;

        }

        public override Book ModifyBookByName()

        {

            //写实现方法

            //return null;

        }*/

    }

}

 

5.有此类来实现,相当与项目中的表现层

 

using System;

using System.Collections.Generic;

using System.Text;

namespace AbstractFactoryMode{

    class Program

    {

        static void Main(string[] args)

        {

            //得到一个子工厂

            AbstractFactory factory = new ConcreteFactory();

            //创造用户

            AbstractUser user = factory.CreateUser();

            user.CreateUser();

            //创造书籍

            AbstractBook book = factory.CreateBook();

            book.CreateBook();

        }

    }

}

 

转载于:https://www.cnblogs.com/immensity/archive/2008/07/19/1246781.html

更多相关:

  • 在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用json格式的配置文件,那么在.net core中该如何读取json文件呢?1、在Startup类中读取json配置文件1、使用Confi...

  •   1 public class FrameSubject extends JFrame {   2    3   …………..   4    5   //因为无法使用多重继承,这儿就只能使用对象组合的方式来引入一个   6    7   //java.util.Observerable对象了。   8    9   DateSub...

  • 本案例主要说明如何使用NSwag 工具使用桌面工具快速生成c# 客户端代码、快速的访问Web Api。 NSwagStudio 下载地址 比较强大、可以生成TypeScript、WebApi Controller、CSharp Client  1、运行WebApi项目  URL http://yourserver/swagger 然后...

  •   在绑定完Action的所有参数后,WebAPI并不会马上执行该方法,而要对参数进行验证,以保证输入的合法性.   ModelState 在ApiController中一个ModelState属性用来获取参数验证结果.   public abstract class ApiController : IHttpController,...

  • 1# 引用  C:AVEVAMarineOH12.1.SP4Aveva.ApplicationFramework.dll C:AVEVAMarineOH12.1.SP4Aveva.ApplicationFramework.Presentation.dll 2# 引用命名空间, using Aveva.Applicati...

  • IHostingEnviroment 获取环境相关洗洗 IsDevelopment()、IsStaging()、IsProduction() 分别为:开发、准生产、生产环境 IsEnviroment("Uat") 自定义环境,比如自定义Uat环境 新建: appsettings.Uat.json文件 {"Enviroment":...

  • 七. DockPanel DockPanel定义一个区域,在此区域中,您可以使子元素通过描点的形式排列,这些对象位于 Children 属性中。停靠面板其实就是在WinForm类似于Dock属性的元 素。DockPanel会对每个子元素进行排序,并停靠在面板的一侧,多个停靠在同侧的元素则按顺序排序。     如果将 LastChild...

  • 该链接有导入,导出源码,我的代码有下链接改写,完善而成的, http://www.cnblogs.com/colder/p/3611906.html using System;using System.Collections.Generic;using System.Linq;using System.Web;using System...

  • 转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ 对于SharePoint中已经是Record的Item,我们想要修改他的属性,这在UI界面是无法完成的: 这时需要通过Records.BypassLocks API来完成。设计一个tool,利用Records.BypassLocks...

  • C# async await 学习笔记1(http://www.cnblogs.com/siso/p/3691059.html)  提到了ThreadId是一样的,突然想到在WinForm中,非UI线程是无法直接更新UI线程上的控件的问题。 于是做了如下测试: using System; using System.Collectio...

  • 关于Graphics也有了基本了解下面想说的的是学这个东东干什么呢,到底如何应用目前常见应用1、验证码(参照网上的)2、打印排版(会提到关于条形码大小设置)3、自定义控件 一、验证码 1 class ValidateCode 2 { 3 #region 定义和初始化配置字段 4...

  •   最近公司在做一个医疗项目,使用WinForm界面作为客户端交互界面。在整个客户端解决方案中。使用了MVP模式实现。由于之前没有接触过该设计模式,所以在项目完成到某个阶段时,将使用MVP的体会写在博客里面。   所谓的MVP指的是Model,View,Presenter。对于一个UI模块来说,它的所有功能被分割为三个部分,分别通过M...

  • 关于具体需求,请看前面的博文:DDD领域驱动设计实践篇之如何提取模型,下面是具体的实体、聚合、值对象的代码,不想多说什么是实体、聚合等概念,相信理论的东西大家已经知晓了。本人对DDD表示好奇,没有在真正项目实践过,甚至也没有看过真正的DDD实践的项目源码,处于极度纠结状态,甚至无法自拔,所以告诫DDD爱好者们,如果要在项目里面实践DD...

  • TPL Dataflow是微软面向高并发应用而推出的新程序库。借助于异步消息传递与管道,它可以提供比线程池更好的控制。本身TPL库在DataflowBlock类中提供了不少扩展函数,用起来还是非常方便的,但感觉还是不够全(当然,MS没必要设计大而全的接口),前段时间写个小程序的时候用到了它,当时顺便写了几个扩展函数,这里记录一下,如果...

  • 前言       写系列文章的时候[前言]部分变得无言了,可能来得顺利了点吧: ) 本章中提供的封装均是我用笨办法从<>和<>中拷贝出来并参照VC++代码进行整理的,主要是针对HikServ...