就不解释抽象工厂是什么了,直接上代码:

两个具体类: public Department() {     Console.WriteLine("创建了一个Department"); } public User() {     Console.WriteLine("创建了一个User"); }
负责Department的 interface IDepartment {     void Insert(Department department);     Department GetDepartment(int id); } class AccessDepartment : IDepartment {     public AccessDepartment()     {         Console.WriteLine("调用了AccessDepartment的构造函数");     }
    #region IDepartment 成员
    public void Insert(Department department)     {         Console.WriteLine("在Access里给部门表增加记录");     }
    public Department GetDepartment(int id)     {         Console.WriteLine("在Access里根据ID得到部门表一条记录");         return null;     }
    #endregion } class SqlserverDepartment:IDepartment {     public SqlserverDepartment()     {         Console.WriteLine("调用了SqlserverDepartment的构造函数");     }
    #region IDepartment 成员
    public void Insert(Department department)     {         Console.WriteLine("在SQL里给部门表增加记录");     }
    public Department GetDepartment(int id)     {         Console.WriteLine("在SQL里根据ID得到部门表一条记录");         return null;     }
    #endregion }
负责User的 interface IUser {     void Insert(User user);     User GetUser(int id); } class AccessUser : IUser {     #region IUser 成员
    public void Insert(User user)     {         Console.WriteLine("通过AccessUser类里的IUser成员函数Insert创建了一个新的User");     }
    public User GetUser(int id)     {         Console.WriteLine("通过AccessUser类里的IUser成员函数GetUser取得ID为{0}的user编号", id);         return null;     }
    #endregion } class SqlserverUser:IUser {     #region IUser 成员
    public void Insert(User user)     {         Console.WriteLine("通过SqlserverUser类里的IUser成员函数Insert创建了一个新的User");     }
    public User GetUser(int id)     {         Console.WriteLine("通过SqlserverUser类里的IUser成员函数GetUser取得ID为{0}的user编号", id);         return null;     }
    #endregion }
工厂: //所有工厂的抽象——抽象工厂 interface IFactory {     //两个接口类型,由客户程序通过向上转换原则new出具体类的对象     IUser CreateUser();     IDepartment CreateDepartment(); } class AccessFactory : IFactory {     public AccessFactory()     {         Console.WriteLine("调用了SqlServerFactory的构造函数");     }
    #region IFactory 成员
    public IUser CreateUser()     {         Console.WriteLine("通过AccessFactory类里的IFactory成员函数CreateUser创建了一个新的AccessUser");         return new AccessUser();     }
    public IDepartment CreateDepartment()     {         Console.WriteLine("通过AccessFactory类里的IFactory成员函数IDepartment创建了一个新的AccessDepartment");         return new AccessDepartment();     }
    #endregion } class SqlServerFactory:IFactory {     public SqlServerFactory()     {         Console.WriteLine("调用了SqlServerFactory的构造函数");     }
    #region IFactory 成员
    public IUser CreateUser()     {         Console.WriteLine("通过SqlServerFactory类里的IFactory成员函数CreateUser创建了一个新的SqlserverUser");         return new SqlserverUser();     }
    public IDepartment CreateDepartment()     {         Console.WriteLine("通过SqlServerFactory类里的IFactory成员函数CreateDepartment创建了一个新的SqlserverDepartment");         return new SqlserverDepartment();     }
    #endregion }
客户端: static void Main(string[] args) {     //创建两个数据表对象     Console.WriteLine("\n调用User user = new User();");     User user = new User();     Console.WriteLine("\n调用Department dept = new Department();");     Department dept = new Department();
    //变化点:创建一个抽象工厂,new具体的工厂     Console.WriteLine("\n调用IFactory ifactory = new SqlServerFactory();");     IFactory ifactory = new SqlServerFactory();     //Console.WriteLine("\n调用IFactory ifactory = new AccessFactory();");     //IFactory ifactory = new AccessFactory();
    //通过接口创建user执行具体操作     Console.WriteLine("\n调用IUser iuser = ifactory.CreateUser();");     IUser iuser = ifactory.CreateUser();     Console.WriteLine("\n调用iuser.Insert(user);");     iuser.Insert(user);     Console.WriteLine("\n调用iuser.GetUser(1);");     iuser.GetUser(1);
    //通过接口创建department执行具体操作     Console.WriteLine("\n调用IDepartment idepartment = ifactory.CreateDepartment();");     IDepartment idepartment = ifactory.CreateDepartment();     Console.WriteLine("\n调用idepartment.Insert(dept);");     idepartment.Insert(dept);     Console.WriteLine("\n调用idepartment.GetDepartment(1);");     idepartment.GetDepartment(1);
    Console.ReadKey(); }

转载于:https://www.cnblogs.com/houzhitong/archive/2012/03/17/2403911.html

注释很全的抽象工厂(没用简单工厂优化)相关推荐

  1. Android工厂设计模式(简单工厂,工厂方法,抽象工厂,BitmapFactory简单工厂分析,Retrofit抽象工厂分析)

    文章目录 创建型设计模式(简单工厂,工厂方法,抽象工厂) 一.简单工厂模式 引出简单工厂模式 二.工厂方法模式 三.抽象工厂模式 Android源码中用到的工厂模式举例 一.BitmapFactory ...

  2. 工厂模式--简单工厂模式--抽象工厂模式

    工厂模式 作用:实现创建者与调用者的分离 简单工厂模式.工厂方法模式.抽象工厂模式,都是属于创建型设计模式.严格上来说,简单工厂模式不属于23设计模式之一,因为它违背了开闭原则. ========== ...

  3. JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·简单工厂——区分“变与不变”

    JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·简单工厂--区分"变与不变" 先来说说构造器 在介绍工厂模式之前,为了辅助大家的理解,我想先在这儿给大家介绍 ...

  4. 设计模式--静态工厂、简单工厂方法案例分析

    简介 1.学习本篇文章,了解简单工厂设计模式的使用场景. 2.如何使用简单工厂模式. 3.简单工厂模式能解决什么问题? 场景 现在有一家外卖小店需要从生产一份外卖开始进行考虑设计,当客户在网上点出不同 ...

  5. 1.0 工厂模式-简单工厂

    简介 工厂模式(Factory Pattern)是 Java中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.将创建对象的过程延迟到子类,分为简单工厂,工厂方法 ...

  6. 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)

    园子里关于23种设计模式的博文已经可以说是成千上万.车载斗量.屯街塞巷.不计其数.数不胜数.摩肩接踵.汗牛充栋.车水马龙.门庭若市.琳琅满目直至让人眼花缭乱了.在这样的大环境下之所以来写设计模式类的博 ...

  7. 创建型模式:工厂模式(简单工厂+工厂方法+抽象工厂)

    一.引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!& ...

  8. 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂) v阅读目录

    1楼留头头大神:http://www.cnblogs.com/toutou/p/4899388.html v阅读目录 v写在前面 v简单工厂模式 v工厂方法模式 v抽象工厂模式 v博客总结 v博客前言 ...

  9. 工厂模式,简单工厂模式,抽象工厂模式三者有什么区别

    工厂模式,也叫做说虚构造器,在简单工厂中间插入了一个具体产品工厂,这个工厂知道产品构造时候的具体细节,而简单工厂模式的产品具体构造细节是在一个个if/else分支,或者在switch/case分支里面 ...

最新文章

  1. nb移动udp_hwasy-geomagnetism-nbiot
  2. bzoj 5340: [Ctsc2018]假面
  3. 分割 标注数据_另辟蹊径,中科院自动化所等首次用图卷积网络解决语义分割难题...
  4. 定义const变量是不可以赋值_JavaScript的声明方法和作用范围,常见的结构赋值类型和使用场景...
  5. Win32下的录音编程
  6. php5.0 添加接口,Thinkphp5.0模型---插入数据
  7. python矩阵所有元素取整_Python主要逻辑基础与处理
  8. Ubuntu 18.04 8T硬盘挂载
  9. 手机 物理分辨率 逻辑分辨率
  10. 当前只读状态:是_DM数据库的启停以及数据库状态检查
  11. Unity读取CSV表格时出现中文乱码处理方式
  12. Linux(ubuntu 18)上编译 及修改 INAV 飞控代码(混控功能)
  13. tomcat插入oracle中文乱码_Java连接数据库oracle中文乱码解决方案
  14. 使用简单好用的WiFi摄像头,远程监控不再难
  15. php 覆盖写入txt文件内容,PHP使用内置函数file_put_contents覆盖写入文件及追加内容的方法...
  16. 网卡能通过usb接口与计算机连接吗,usb网卡怎么使用 usb网卡使用方法【图文】...
  17. 《研发企业管理——思想、方法、流程和工具》——第1章 企业管理基本理念 1.1 企业的根本目标及其内涵...
  18. rabbitmq(二):死信队列,springboot 实现3种情况
  19. 宇视200W 相机一天所占存储空间是多少
  20. CSDN是怎么样的一个网站

热门文章

  1. SpringBatch学习一个Demo项目
  2. CSS 定位 (Positioning)
  3. python中的turtle函数_1.常用turtle功能函数
  4. 计算机常见知识获取方法,计算机信息处理技术基础知识
  5. tof摄像头手势识别_行业深度光学行业研究:CIS、光学元件、指纹识别、镜头模组...
  6. PHP设计模式之装饰模式(Decorator)
  7. Web 服务器-Apache详解
  8. angular 注入器配置_angular依赖注入
  9. 金税接口调用实例 java_Java 常见面试题
  10. mysql commit 机制_1024MySQL事物提交机制