注释很全的抽象工厂(没用简单工厂优化)
就不解释抽象工厂是什么了,直接上代码:
两个具体类: 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
注释很全的抽象工厂(没用简单工厂优化)相关推荐
- Android工厂设计模式(简单工厂,工厂方法,抽象工厂,BitmapFactory简单工厂分析,Retrofit抽象工厂分析)
文章目录 创建型设计模式(简单工厂,工厂方法,抽象工厂) 一.简单工厂模式 引出简单工厂模式 二.工厂方法模式 三.抽象工厂模式 Android源码中用到的工厂模式举例 一.BitmapFactory ...
- 工厂模式--简单工厂模式--抽象工厂模式
工厂模式 作用:实现创建者与调用者的分离 简单工厂模式.工厂方法模式.抽象工厂模式,都是属于创建型设计模式.严格上来说,简单工厂模式不属于23设计模式之一,因为它违背了开闭原则. ========== ...
- JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·简单工厂——区分“变与不变”
JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·简单工厂--区分"变与不变" 先来说说构造器 在介绍工厂模式之前,为了辅助大家的理解,我想先在这儿给大家介绍 ...
- 设计模式--静态工厂、简单工厂方法案例分析
简介 1.学习本篇文章,了解简单工厂设计模式的使用场景. 2.如何使用简单工厂模式. 3.简单工厂模式能解决什么问题? 场景 现在有一家外卖小店需要从生产一份外卖开始进行考虑设计,当客户在网上点出不同 ...
- 1.0 工厂模式-简单工厂
简介 工厂模式(Factory Pattern)是 Java中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.将创建对象的过程延迟到子类,分为简单工厂,工厂方法 ...
- 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)
园子里关于23种设计模式的博文已经可以说是成千上万.车载斗量.屯街塞巷.不计其数.数不胜数.摩肩接踵.汗牛充栋.车水马龙.门庭若市.琳琅满目直至让人眼花缭乱了.在这样的大环境下之所以来写设计模式类的博 ...
- 创建型模式:工厂模式(简单工厂+工厂方法+抽象工厂)
一.引子 话说十年前,有一个爆发户,他家有三辆汽车(Benz(奔驰).Bmw(宝马).Audi(奥迪)),还雇了司机为他开车.不过,爆发户坐车时总是这样:上Benz车后跟司机说"开奔驰车!& ...
- 详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂) v阅读目录
1楼留头头大神:http://www.cnblogs.com/toutou/p/4899388.html v阅读目录 v写在前面 v简单工厂模式 v工厂方法模式 v抽象工厂模式 v博客总结 v博客前言 ...
- 工厂模式,简单工厂模式,抽象工厂模式三者有什么区别
工厂模式,也叫做说虚构造器,在简单工厂中间插入了一个具体产品工厂,这个工厂知道产品构造时候的具体细节,而简单工厂模式的产品具体构造细节是在一个个if/else分支,或者在switch/case分支里面 ...
最新文章
- nb移动udp_hwasy-geomagnetism-nbiot
- bzoj 5340: [Ctsc2018]假面
- 分割 标注数据_另辟蹊径,中科院自动化所等首次用图卷积网络解决语义分割难题...
- 定义const变量是不可以赋值_JavaScript的声明方法和作用范围,常见的结构赋值类型和使用场景...
- Win32下的录音编程
- php5.0 添加接口,Thinkphp5.0模型---插入数据
- python矩阵所有元素取整_Python主要逻辑基础与处理
- Ubuntu 18.04 8T硬盘挂载
- 手机 物理分辨率 逻辑分辨率
- 当前只读状态:是_DM数据库的启停以及数据库状态检查
- Unity读取CSV表格时出现中文乱码处理方式
- Linux(ubuntu 18)上编译 及修改 INAV 飞控代码(混控功能)
- tomcat插入oracle中文乱码_Java连接数据库oracle中文乱码解决方案
- 使用简单好用的WiFi摄像头,远程监控不再难
- php 覆盖写入txt文件内容,PHP使用内置函数file_put_contents覆盖写入文件及追加内容的方法...
- 网卡能通过usb接口与计算机连接吗,usb网卡怎么使用 usb网卡使用方法【图文】...
- 《研发企业管理——思想、方法、流程和工具》——第1章 企业管理基本理念 1.1 企业的根本目标及其内涵...
- rabbitmq(二):死信队列,springboot 实现3种情况
- 宇视200W 相机一天所占存储空间是多少
- CSDN是怎么样的一个网站
热门文章
- SpringBatch学习一个Demo项目
- CSS 定位 (Positioning)
- python中的turtle函数_1.常用turtle功能函数
- 计算机常见知识获取方法,计算机信息处理技术基础知识
- tof摄像头手势识别_行业深度光学行业研究:CIS、光学元件、指纹识别、镜头模组...
- PHP设计模式之装饰模式(Decorator)
- Web 服务器-Apache详解
- angular 注入器配置_angular依赖注入
- 金税接口调用实例 java_Java 常见面试题
- mysql commit 机制_1024MySQL事物提交机制