最新要闻
- 诺如病毒进入高发期 学校、家庭如何做好预防?一文了解
- 你怕失业吗?马斯克炮轰人工智能:比核弹头更危险
- 巴菲特“黄金搭档”芒格盛赞:比亚迪在中国遥遥领先于特斯拉
- 40岁男子报复10岁小孩连划7车引围观:结局舒适了 网友点赞
- 《霍格沃茨之遗》更新后PC优化更差!玩家:游戏卡顿问题解决一下
- 快资讯丨再下一城!百度地图红绿灯倒计时上线兰州:实时读秒
- 最资讯丨下行5000兆 跟上行同速!谷歌美国推5Gbps光纤:每月850元
- 片仔癀珍珠霜的功效
- 环球热点评!5年前就已杀青 周星驰《美人鱼2》进入后期制作
- 谨慎升级 等了2个月的AMD新驱动疑似翻车:系统崩了
- 世界热议:央广网:“暴雪式”傲慢引众怒 或终将致其失去中国市场
- 要闻速递:中国移动:加速千兆网络全面普及 建成全球最大规模光网络
- 中国快递卷了15年:死死困住了一个50岁的老快递员
- 纽约黄金期货周三收跌1.1% 创五周来最低收盘价
- 1998年属虎的人2012年运程
- 今日聚焦!qq情侣网名 〈談情》**/|(說爰)ⅱ,
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
全球播报:再有人问你抽象工厂设计模式,把这篇文章丢给他
(资料图)
概述
抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一组产品。抽象工厂模式定义如下:
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。
描述需求
分别往SQLserver、mysql、sqliter数据库中添加用户和部门数据。
抽象工厂实现代码
////// 顶层抽象工厂 /// public interface IFacatory { IDatabaseUser GetDatabaseUser(); IDatabaseDepartment GetDatabaseDepartment(); } ////// 具体工厂 /// public class SqlliteFacatory : IFacatory { public IDatabaseDepartment GetDatabaseDepartment() { return new SqlliteDepartment(); } public IDatabaseUser GetDatabaseUser() { return new SqliteUser(); } } ////// 具体工厂 /// public class MysqlFacatory : IFacatory { public IDatabaseDepartment GetDatabaseDepartment() { return new MysqlDepartment(); } public IDatabaseUser GetDatabaseUser() { return new MysqlUser(); } } ////// 具体工厂 /// public class SqlserverFacatory : IFacatory { public IDatabaseDepartment GetDatabaseDepartment() { return new SqlServerDepartment(); } public IDatabaseUser GetDatabaseUser() { return new SqlServerUser(); } }
////// 用户类 /// public class User { public string Name { get; set; } public int Id { get; set; } } ////// 抽象的产品 /// public interface IDatabaseUser { void InsertUser(User user); User GetUser(int id); } ////// 具体的产品 /// public class SqlServerUser: IDatabaseUser { public void InsertUser(User user) { Console.WriteLine($"插入了SqlServerUser:{user.Name}"); } public User GetUser(int id) { Console.WriteLine($"获取了Id:{id}的用户"); return null; } } ////// 具体的产品 /// public class MysqlUser : IDatabaseUser { public void InsertUser(User user) { Console.WriteLine($"插入了MysqlUser:{user.Name}"); } public User GetUser(int id) { Console.WriteLine($"获取了Id:{id}的用户"); return null; } } ////// 具体的产品 /// public class SqliteUser : IDatabaseUser { public void InsertUser(User user) { Console.WriteLine($"插入了SqliteUser:{user.Name}"); } public User GetUser(int id) { Console.WriteLine($"获取了Id:{id}的用户"); return null; } }
////// 部门类 /// public class Department { public string Name { get; set; } public int Id { get; set; } } ////// 抽象的产品 /// public interface IDatabaseDepartment { void InsertDepartment(Department department); Department GetDepartment(int id); } ////// 具体的产品 /// public class SqlServerDepartment : IDatabaseDepartment { public void InsertDepartment(Department department) { Console.WriteLine($"插入了SqlServerDepartment部门:{department.Name}"); } public Department GetDepartment(int id) { Console.WriteLine($"获取了Id:{id}的部门"); return null; } } ////// 具体的产品 /// public class MysqlDepartment : IDatabaseDepartment { public void InsertDepartment(Department department) { Console.WriteLine($"插入了MysqlDepartment部门:{department.Name}"); } public Department GetDepartment(int id) { Console.WriteLine($"获取了Id:{id}的部门"); return null; } } ////// 具体的产品 /// public class SqlliteDepartment : IDatabaseDepartment { public void InsertDepartment(Department department) { Console.WriteLine($"插入了SqlliteDepartment部门:{department.Name}"); } public Department GetDepartment(int id) { Console.WriteLine($"获取了Id:{id}的部门"); return null; } }
//C#控制台调用Console.WriteLine("抽象工厂");User user = new();user.Name = "mhg";user.Id = 1;//变化点IFacatory facatory=new SqlserverFacatory(); //MysqlFacatory //SqlliteFacatoryIDatabaseUser databaseUser = facatory.GetDatabaseUser();databaseUser.InsertUser(user);databaseUser?.GetUser(user.Id);Department department = new Department();department.Name = "研发部";department.Id = 2;IDatabaseDepartment databaseDepartment= facatory.GetDatabaseDepartment();databaseDepartment.InsertDepartment(department); databaseDepartment?.GetDepartment(department.Id);
以上就用抽象工厂实现的全部代码,该代码中IFacatory做为抽象工厂,SqlserverFacatory、MysqlFacatory、SqliteFacatory作为具体的产品工厂来生产产品;IDatabaseUser和IDatabaseDepartment为抽象的产品分别生产具体的产品SqlServerUser、MysqlUser、SqliteUser和SqlServerDepartment、MysqlDepartment、SqlliteDepartment。
总结
这个需求也可以用工厂模式实现,但每增加一个产品,就必须增加一个工厂类,而用抽象工厂可以缩减创建子类工厂的数量,不必给每一个产品增加工厂类,可以对产品进行分组,每组中的不同产品由同一个工厂类的不同方法来创建。
全球播报:再有人问你抽象工厂设计模式,把这篇文章丢给他
环球观天下!时间是什么?时间同步是什么?GPS北斗卫星授时又是什么?
世界要闻:《分布式技术原理与算法解析》学习笔记Day13
诺如病毒进入高发期 学校、家庭如何做好预防?一文了解
你怕失业吗?马斯克炮轰人工智能:比核弹头更危险
巴菲特“黄金搭档”芒格盛赞:比亚迪在中国遥遥领先于特斯拉
40岁男子报复10岁小孩连划7车引围观:结局舒适了 网友点赞
《霍格沃茨之遗》更新后PC优化更差!玩家:游戏卡顿问题解决一下
快资讯丨再下一城!百度地图红绿灯倒计时上线兰州:实时读秒
最资讯丨下行5000兆 跟上行同速!谷歌美国推5Gbps光纤:每月850元
全球要闻:读Java实战(第二版)笔记11_语言特性和类库更新
片仔癀珍珠霜的功效
天天热头条丨HEU KMS Activator 28.0.0全能系统数字许可激活工具
CentOS7.9安装K8S高可用集群(三主三从)
Android JetPack~ LiveData (一) 介绍与使用
环球观热点:SDK多项目开发与联调
全球快看:期末复习——线程
环球热点评!5年前就已杀青 周星驰《美人鱼2》进入后期制作
谨慎升级 等了2个月的AMD新驱动疑似翻车:系统崩了
世界热议:央广网:“暴雪式”傲慢引众怒 或终将致其失去中国市场
要闻速递:中国移动:加速千兆网络全面普及 建成全球最大规模光网络
中国快递卷了15年:死死困住了一个50岁的老快递员
纽约黄金期货周三收跌1.1% 创五周来最低收盘价
1998年属虎的人2012年运程
今日聚焦!qq情侣网名 〈談情》**/|(說爰)ⅱ,
80年代的零食大全怀旧辣条_80年代的零食大全怀旧
【保姆级】Python最新版3.11.1开发环境搭建,看这一篇就够了(适用于Python3.11.2安装)
【天天新要闻】day10-1-中文乱码处理
实时焦点:一次学俩Vue&Blazor:1.4基础-响应式数据
数论模板
世界微速讯:2023年春运收官:40天发送旅客近16亿人次 大涨50%
【环球报资讯】数据结构刷题2023.02.15小记
给我两分钟的时间:微博风格九宫格:UICollectionView实现
《分布式技术原理与算法解析》学习笔记Day12
【算法训练营day45】LeetCode70. 爬楼梯(进阶) LeetCode322. 零钱兑换 LeetCode279. 完全平方数
香港2022年暴力罪案同比下降7.9%
观天下!探险的好处辩论赛,正方_探险的好处
全球播报:AMD RX 7600S游戏本显卡首测:远不如RTX 3060!高端弃疗了
世界速讯:10道恋爱送命题灵魂拷问ChatGPT:它的回答让我陷入沉思
马斯克向往每周只工作80小时!网友:驴都不敢这么用
每日速读!中国内地特供!Intel i5-13490F处理器图赏
天天快看:002. html篇之《表格》
当前视讯!力扣---3. 无重复字符的最长子串
今日热文:轻薄长续航!小新Air14超极本2023发布:标配13代酷睿+1TB SSD
普及1TB 联想小新2023笔记本、一体机价格汇总:最贵才8999元
每日资讯:8999元 联想小新Pro 27一体机发布:13代酷睿i9搭配Arc独显
环球微头条丨4199元起 小新14/16轻薄本2023发布:酷睿i5-1340P、高配1TB SSD
播报:三星Galaxy S23 Ultra发布 老外怒赞:安卓阵营老大
最资讯丨【LeetCode栈与队列#05】滑动窗口最大值
如何优雅的在 Word 中添加漂亮的代码?
今日热文:2023.02.15.差分
热头条丨公积金月汇缴额是什么意思
当前热讯:用微信传播盗版电影被查:向两百多人分享《流浪地球2》《满江红》链接
新资讯:日本独居雌长臂猿突然产崽!孩子的父亲竟还是自己的“爷爷”
环球最新:Lady Gaga《小丑2》剧照首曝:疯狂的小丑女登场!
环球速讯:联想小新官宣接入百度“文心一言”:可在桌面一键直达
当前通讯!新能源车企现最大跌幅背后:涨价、营销、刺激消费的“国补退坡游戏”
【环球速看料】数据类型之字符串、数据类型之列表、数据类型之字典、数据类型之布尔值、数据类型之元组、数据类型之集合、与用户交互、格式化输出、基本运算符
每日热讯!数字化开采|AIRIOT智慧矿山自动化生产解决方案
全球视讯!wagger也不好用了!API文档还得是Apipost
世界信息:Web 页面之间传递参数
Java开发工具IntelliJ IDEA 2020.2完整授权流程
观速讯丨一加显示器E 24上市:24寸IPS屏、18W PD输出
环球最新:网易代理《迷室3》《迷室:往逝》经典手游宣布停运:数据全清空
硬蹭名气?《中国式相亲2》非《中国式家长》团队作品
热议:桂格燕麦诞生于俄亥俄引网友关注 客服:产品与俄亥俄无关
环球微动态丨电量低于20%赶快充电!雅迪电动车保养攻略来了:关乎安全 车主必看
前沿热点:M值如何兑换话费
焦点观察:记录--『uni-app、小程序』蓝牙连接、读写数据全过程
全球速看:PostgreSQL重要参数解析及优化
天天新动态:openeuler加载dpdk驱动模块
【全球报资讯】(数据库系统概论|王珊)第三章关系数据库标准语言SQL-第六、七节:视图
环球热头条丨【算法训练营day44】完全背包基础 LeetCode518. 零钱兑换II LeetCode377. 组合总和IV
天天看热讯:想要模仿LPL,DRX赛后发漫画,却被Gen官方拉黑了?
焦点速读:Win11下月喜迎更新大礼包:10GB补丁 重启次数更少
【环球播资讯】员工发现老板娘偷看同事微信:火速离职
天天精选!车标成伤人凶器 日产召回超40万辆汽车
索尼降噪耳机新秀!WH-CH720N意外偷跑:升级蓝牙5.2
大国重器 首台国产HA级重型燃机下线:未来将100%零排放
焦点!字体查看小工具 -- (采用wpf开发)
【算法训练营day43】LeetCode1049. 最后一块石头的重量II LeetCode494. 目标和 LeetCode474. 一和零
每日看点!独立包装:大牌N95口罩25片9.9元到手
环球观速讯丨贾跃亭名下已无财产可执行:无车辆、不动产
【环球报资讯】苹果逐渐向OLED过渡!替换掉mini LED
世界消息!羊毛没了 Steam阿根廷区《卧龙》价格暴涨一倍
焦点讯息:一看就能装!奇瑞iCar原厂趣改套件上市:3389元起
你应该知道的微信小程序游戏技术❗️❗️
【算法题--异或操作】找出数组中唯一没有重复的那个元素
极兔一面:Dockerfile如何优化?注意:千万不要只说减少层数
环球时讯:怎样的目标管理能真正实现目标?做到这3点就对了
开心档之Java 流(Stream)、文件(File)和IO
【焦点热闻】舍利子制作方法居然也有发明专利 网友:得道高僧等级速升外挂
世界即时:跑腿师傅诉苦:男子订一束花送五个女生均被拒 还被扣款差评
微软将用UUP方式推送.NET更新:“可选更新”终于可控
钉钉iOS版喜迎更新:支持定时消息 再不怕打扰别人休息了
天天热讯:《星际争霸2》新晋中国世界冠军李培楠:别给暴雪送钱 不要买!
天天最新:CSS 盒模型和 box-sizing 属性
环球讯息:全志h616,Ubuntu,python3.9环境搭建
【全球新要闻】【关系型数据库】事务特性及事务隔离级别
软件自动化测试高频面试题