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

嘿嘿      我就不说了

进入正题吧:

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

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

项目名为:AbstractFactoryMode

1.建立抽象总工厂

using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryMode
{
    /// <summary>
    /// 总工厂
    /// </summary>
    public abstract class AbstractFactory
    {
        public abstract AbstractUser CreateUser();
        public abstract AbstractBook CreateBook();
    }
}

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

using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryMode
{
    /// <summary>
    /// 一个具体的工厂
    /// </summary>
    public class ConcreteFactory : AbstractFactory
    {
        /// <summary>
        /// 子工厂,用来创造用户
        /// </summary>
        /// <returns></returns>
        public override AbstractUser CreateUser()
        {
            //具体的产物
            return new User();
        }
        /// <summary>
        /// 子工厂,用来创造书籍
        /// </summary>
        /// <returns></returns>
        public override AbstractBook CreateBook()
        {
            //具体的产物
            return new Book() ;
        }
    }
}

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

//user(用户)抽象产物

using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryMode
{
    /// <summary>
    /// 抽象产物,写关于创造用户所需要的方法
    /// 此抽象产物可写成接口,实现效果一样
    /// </summary>
    public abstract class AbstractUser
    {
        /// <summary>
        /// 此方法用于创造用户
        /// </summary>
        public abstract void CreateUser();
        //以下还可以写很多方法
        //比如:
        //public abstract IList<user> GetAllUser()--------得到所有用户
        //public abstract user GetUserById()-------根据id查询用户
        //public abstract user ModifyUserByName()----根据姓名修改用户
        //这些方法都可以在user类中实现
        //如果把此方法改为接口,那么user类中就 必须完全实现此抽象产物中的全部方法
    }
}

//book(书籍)抽象产物

using System;
using System.Collections.Generic;
using System.Text;

namespace AbstractFactoryMode
{
    /// <summary>
    /// 抽象产物,写关于创造书籍所需要的方法
    /// 此抽象产物可写成接口,实现效果一样
    /// </summary>
    public abstract class AbstractBook        
    {
        /// <summary>
        /// 此方法用与创造书籍
        /// </summary>
        public abstract void CreateBook();
        //以下还可以写很多方法
        //比如:
        //public abstract IList<book> 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
{
    /// <summary>
    /// 具体的实现
    /// 继承产物ABstractUser
    /// </summary>
    public class User:AbstractUser
    {
        public override void CreateUser()
        {
            Console.WriteLine("用户创建成功");
        }
/*      public override IList<user> 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{
    /// <summary>
    /// 具体的实现
    /// 继承产物ABstractBook
    /// </summary>
    public class Book:AbstractBook
    {
        //重写CreateBook方法
        public override void CreateBook()
        {
            Console.WriteLine("书籍创建成功");
        }
/*      public override IList<Book> 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

用C#实现抽象工厂模式相关推荐

  1. 抽象工厂模式 java实例 tclhaier_Unity常用的设计模式_工厂模式系列之抽象工厂模式...

    在工厂方法模式中,工厂只负责生产具体的产品,每一个具体的工厂对应着一个具体的产品,工厂方法也具有唯一性,如果有时候我们需要一个工厂方法提供多个产品而不是一个单一的产品,例如:海尔品牌不止生产海尔TV, ...

  2. 编程模式 之美 -- 抽象工厂模式

    文章目录 1. 解决问题 2. 应用场景 3. 实现如下: C++实现 C语言实现 4. 缺点 1. 解决问题 在工厂方法模式中,我们卖衣服.此时我们为每一种衣服创建不同的工厂,帽子有一个工厂专门创建 ...

  3. 工厂方法模式和抽象工厂模式

    工厂方法模式和抽象工厂模式 工厂方法模式 抽象工厂模式 总结: 工厂方法模式 #include <string> #include <iostream>// Abstract ...

  4. 抽象工厂模式AbstractFactory

    简介 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类.抽象工厂模式又称为Kit模式,属于对象创建型模式. 不同点 ...

  5. 工厂方法模式与抽象工厂模式的区别

    工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类. 一个抽象工厂类,可以派生出多个具体工厂类. 每个具体工厂类只能创建一个具体产品类的实例. 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以 ...

  6. 设计模式C#描述——抽象工厂模式

    设计模式C#描述--抽象工厂模式 阅读此文应先阅读简单工厂模式与工厂方法模式 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广. 假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产 ...

  7. 设计模式之抽象工厂模式(Abstract Factory)摘录

    面向对象系统的分析和设计实际上追求的就是两点:高内聚(Cohesion)和低耦合(Coupling). 23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.Fa ...

  8. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  9. 设计模式之笔记--抽象工厂模式(Abstract Factory)

    抽象工厂模式(Abstract Factory) 定义 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 类图 描述 多个抽象产品 ...

  10. Net设计模式之抽象工厂模式(Abstract Factory Pattern)(1)

    一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...

最新文章

  1. 01、DFT-全面了解如何测试一颗芯片
  2. c#中datareader中HasRows属性和Read方法的区别
  3. SQL Server之游标的基础知识
  4. thinkphp6集成JWT
  5. 把左耳朵、史海峰等牛人引进饿了么,张雪峰是何许人也?
  6. Google Spanner 论文笔记
  7. Spring Data JPA 从入门到精通~如何配置多数据源
  8. php脚本哪里找,我在哪里可以找到PHP-FPM RC脚本?
  9. 机器学习降维算法一:PCA (Principal Component Analysis)
  10. java工作面试必备知识 Java常用类库与技巧
  11. 2.Rails程序框架
  12. Mysql数据库安装和配置
  13. 编写加密程序,将用户输入的一个英文句子加密为加密字符串,然后输出加密字符串。假设句子长度不超过100个字符。每日一题--20200415--字符串加密类型
  14. 00007__js自执行函数(function(){})()前加个分号是什么意思
  15. c语言极限,C语言问题合集
  16. 在线教育需要准备好哪些直播设备?
  17. Civil3D 2018-03 曲面创建
  18. JavaScript Core -- 不可小视的标点符号
  19. C numi和弓道 双指针(2020牛客寒假基础训练营1 )
  20. Postman配置token进行测试

热门文章

  1. is this mysql server_远程连接MySQL数据库报错:is not allowed to connect to this MYSQL server的解决办法...
  2. 普罗米修斯 监控_完美的分布式监控系统——普罗米修斯
  3. LINUX进程调度分析源码,Linux 实时调度(源码分析)
  4. 架设win2003r2下配置好iis6+php+mysql_WIN2003+IIS6 PHP 5.3.8安装配置教程[图文]
  5. mysql 5.6 innodb_MYSQL 5.6中禁用INNODB引擎
  6. Java面试之Java基础下册(含答案)
  7. 70美元桌面电脑,树莓派400:键盘式集成开发板
  8. 正点原子:STM32F103(战舰)、STM32F407(探索者)、STM32F103(MINI)原理图和PCB
  9. Linux那些事儿 之 戏说USB(12)接口是设备的接口(一)
  10. java param request_SpringMvc之@RequestParam详解