最新要闻
- 索尼pcg71212t(索尼pc)
- AITO授权用户中心·合肥长春街盛大开业 开启一站式购车新体验
- 明日之后雪山密道怎么走?
- 金融信创招标持续增长 金融IT厂商业绩或将整体回暖
- 中国版权登记中心电话090099 中国版权登记中心
- 1-7月邮政行业业务收入累计完成8482.3亿元,同比增长10.5%
- 按摩后突发脑中风!小伙半身僵住险丧命!
- 杭州十大不孕不育医院排名 杭州治疗不孕不育好的医院有哪些
- 石锅拌饭的家常做法视频(石锅拌饭的家常做法)
- 普通高等教育国家级规划教材·全国高职高专教育十一五规划教材·企业管理实务(关于普通高等教育国家级规划教材·全国高职高专教育十一五规划教材·企业管理实务的简介)
- 大模型+求解器:阿里大模型数学工具MindOpt Copilot将于近期上线
- 中国天眼又有新发现了!观测到脉冲星辐射新形态
- 特斯拉又一次打响价格战 奔驰CEO:绝不随意调价
- 剑指比亚迪秦PLUS DM-i!吉利银河L6配置公布:亏电油耗4.55升
- 买1得9:京东+腾讯视频等9大联合会员198元(七夕狂促 )
- 赤峰黄金股票8月16日主力资金净流入202.03万元
手机
菏泽首个“全站无亭+智慧云舱”智慧收费站启用!
蓟古“组团式”帮扶专家开展下乡义诊活动
- 菏泽首个“全站无亭+智慧云舱”智慧收费站启用!
- 蓟古“组团式”帮扶专家开展下乡义诊活动
- TA:巴萨未就坎塞洛与曼城有正式接触,德科更喜欢弗雷斯内达
- 农业农村部:加快出台高标准农田建设建后管护政策措施
- 机械键盘键帽材质有哪些 机械键盘键帽材质介绍 机械键盘键帽哪个牌子好
- 井盖儿为什么是圆的数学原理(井盖儿)
家电
设计模式(二)工厂方法
一、前言
工厂模式常见的词:简单工厂、工厂方法、抽象工厂。简单工厂不属于23种经典设计模式,但通常将它作为学习其他工厂模式的基础。
二、简单工厂
1、定义
定义一个工厂类,它可以根据参数的不同返回不同类型的实例,被创建的实例通常都具有共同的父类。由于简单的工厂模式中用于创建实例的方法通常是静态方法,所以简单工厂又被称作为静态工厂。
(资料图)
2、例子
例:开发一套图表库,根据不同的参数可以创建柱状图BarChart,直线图LineChart,饼状图PieChart,下面使用简单工厂来实现。Chart:抽象图表接口,充当抽象产品类
namespace _02_FactoryMethod{ internal interface Chart { void Display(); }}
BarChart:柱状图类,充当具体产品类
namespace _02_FactoryMethod{ class BarChart : Chart { public BarChart() { Console.WriteLine("创建柱状图"); } public void Display() { Console.WriteLine("显示柱状图"); } }}
LineChart:折线图类,充当具体产品类
namespace _02_FactoryMethod{ internal class LineChart : Chart { public LineChart() { Console.WriteLine("创建折线图"); } public void Display() { Console.WriteLine("显示折线图"); } }}
PieChart:饼图类,充当具体产品类
namespace _02_FactoryMethod{ internal class PieChart : Chart { public PieChart() { Console.WriteLine("创建饼图"); } public void Display() { Console.WriteLine("显示饼图"); } }}
ChartFactory:图表工厂类,充当工厂类
namespace _02_FactoryMethod{ internal class ChartFactory { public static Chart GetChart(string type) { Chart chart = null; if (type.Equals("bar")) { chart = new BarChart(); } else if (type.Equals("line")) { chart = new LineChart(); } else if (type.Equals("pie")) { chart = new PieChart(); } return chart; } }}
Program:测试代码
Chart chart = ChartFactory.GetChart("bar");chart.Display();
简单工厂也可以再简化,直接将抽象类和工厂类合并,因为并不是所有类型的产品都那么复杂。
3、总结
实际应用中,简单工厂肯定是难当大任的,工厂类职责过重,一旦出现问题,整个程序直接崩溃,而且产品类不易拓展,新增就意味着改代码。当然,如果只是一个简单程序,配合使用反射、配置文件等手段可以快速完成开发,相信大家都“吃过猪肉也见过猪跑”。
三、工厂方法
1、定义
定义一个用于创建对象的接口,但是让子类决定将哪一个实例化。工厂方法模式让一个类的实例化延迟到其子类,是一种创建型模式。与简单工厂相比,引入了抽象工厂角色。工厂方法模式包含以下四个角色:1、Product(抽象产品):它是定义产品的接口,是工厂方法模式所创建对象的超类型,也就是产品对象的公共父类。2、ConcreteProduct(具体产品):它实现了抽象产品接口,某种类型的具体产品由专门的具体工厂创建,具体工厂和具体产品之间一一对应。3、Factory(抽象工厂):在抽象工厂类中,声明了工厂方法(Factory Method),用于返回一个产品。抽象工厂是工厂方法模式的核心,所有创建对象的工厂类都必须实现该接口。4、ConcreteFactory(具体工厂):它是抽象工厂类的子类,实现了在抽象工厂中声明的工厂方法,由客户端调用,返回一个具体产品类的实例。
2、例子
例:系统封装多种记录日志方式,包括文件记录日志、数据库记录日志等,可以根据需求切换。LoggerFactory:抽象产品工厂接口,供具体产品(数据库记录日志、文件记录日志)工厂继承,实现创建具体产品类的方法
public interface LoggerFactory{ public Logger CreateLogger();}
DataBaseLoggerFactory:数据库记录日志工厂类,继承抽象产品工厂接口
public class DataBaseLoggerFactory : LoggerFactory{ public Logger CreateLogger() { //创建数据库业务代码略 Logger logger = new DataBaseLogger(); return logger; }}
FileLoggerFactory:文件记录日志工厂类,继承抽象产品工厂接口
public class FileLoggerFactory : LoggerFactory{ public Logger CreateLogger() { //创建文件业务代码略 Logger logger = new FileLogger(); return logger; }}
Logger:抽象产品接口,供具体产品类继承,实现记录日志的具体方法
public interface Logger{ void WriteLog();}
DataBaseLogger:数据库记录日志类,继承抽象产品
public class DataBaseLogger : Logger{ public void WriteLog() { Console.WriteLine("数据库记录日志"); }}
FileLogger:文件记录日志类,继承抽象产品
public class FileLogger : Logger{ public void WriteLog() { Console.WriteLine("文件记录日志"); }}
Program:客户端测试类
LoggerFactory loggerFactory = new DataBaseLoggerFactory();Logger logger = loggerFactory.CreateLogger();logger.WriteLog();
3、总结
工厂方法模式除了包含简单工厂的优点,还弥补了不足,当需要添加新产品时,只需要添加一个具体工厂和具体产品即可,无需改动已有代码,增强系统可扩展性,符合开闭原则。当然这同时也增加了系统的理解难度,具体产品类过多的话,系统将变得无比庞大。
关键词:
设计模式(二)工厂方法
固态硬盘是什么样的 固态硬盘是什么
卡马文加:为皇马出战百场比赛是不少的数字,想要赢得每个冠军
哈特森:曾以为蒂尔尼会震惊英超 他与主教练的关系可能已经破裂
美警误杀男子后获警局庇护 外媒:全美警察误杀平民事件已越发频繁
北互发布首份涉网暴人格权侵害禁令,律师:结合了救济与预防
外面的世界都这样了?留学生分享生活日常,原谅我不厚道的笑了
索尼pcg71212t(索尼pc)
AITO授权用户中心·合肥长春街盛大开业 开启一站式购车新体验
三本火影忍者同人小说,作者加入了自己对忍术、忍界设定的理解
Redmi K60至尊版发布 2599元起售
国家防总办公室、应急管理部紧急调运中央物资支持天津防汛排涝
郑州市社保官网网址 郑州市社保官网登录
明日之后雪山密道怎么走?
尚晋国际控股(02528.HK)预计中期净亏同比有所收窄
浙江震元(000705.SZ):公司SPD项目与安徽中技国医医疗科技有合作
穿越火线手游新出的刀(穿越火线新刀多少钱)
受干旱影响 巴拿马运河延长限行措施
国轩高科(002074.SZ):过剩产能也是市场的优胜劣汰,未来优质动力电池生产企业会获得更多市场份额
车上的reset是什么(车上的reset是什么意思?)
金融信创招标持续增长 金融IT厂商业绩或将整体回暖
宁夏建材董秘回复: 如政府有相关的优惠或奖补政策,公司将会积极争取
远洋集团回应债券违约:市场理解爆雷有误,投票数足够可以豁免违约
日媒:为满足职场人士午睡需求,日本推出站立式午睡舱
全国首个南水北调水源区生态环境警察支队成立
讷河市税务局联学联建赋能融合发展
每家医院都应有“向我吐槽”的魄力
勇夺第三,武汉花滑选手首次在国家级赛事中站上领奖台
联通京九、沪昆、京港……今天,昌景黄高铁接入国家“八纵八横”高铁网,年内开通运营
叶倩文和继子同台,一家三口审美全不同,和继子牵手完全不尴尬
吉利银河L6成都车展上预售 15-20万元起
项目贷款的4个基本条件 项目贷款的条件是什么
中国版权登记中心电话090099 中国版权登记中心
成龙又一部新片,这次豆瓣 7.2
1-7月邮政行业业务收入累计完成8482.3亿元,同比增长10.5%
浦东启动这场长三角集成电路技能邀请赛,助力培育吸纳更多优秀人才
贵阳市纪委监委通报2023年上半年党风廉政建设和反腐败工作情况
点燃夏日多巴胺,潮流的你手上怎能没有一个亮眼的水杯?
街坊中坊读音 街坊中坊的注音是什吗
按摩后突发脑中风!小伙半身僵住险丧命!
厨师炸肉丸子的正宗做法?
“公益诉讼守护美好生活”专项监督活动期间 中国检察机关办案36.5万件
腾讯Q2游戏业务收入445亿元 国际市场游戏发力增长
杭州十大不孕不育医院排名 杭州治疗不孕不育好的医院有哪些
董干镇马波小学(关于董干镇马波小学简述)
学习·创新·职业生涯(关于学习·创新·职业生涯简述)
俄军没把乌克兰去军事化,先把自己去工业化,中国想帮都帮不了
电脑wps表格怎么制作表格(wps表格怎么制作表格)
网络邻居找不到工作组内的计算机 网络邻居
石锅拌饭的家常做法视频(石锅拌饭的家常做法)
华为账号怎么注销游戏账号(华为账号怎么注销)
机械制图与AutoCAD教程(对于机械制图与AutoCAD教程简单介绍)
南阳西峡旅游景点大全简介(南阳西峡旅游景点)
“网红”达人相聚海口石山镇寻访美食 体验“舌尖上”惬意
普通高等教育国家级规划教材·全国高职高专教育十一五规划教材·企业管理实务(关于普通高等教育国家级规划教材·全国高职高专教育十一五规划教材·企业管理实务的简介)
湖湘自然历丨气象万千⑮早晨的期待,不只有阳光
三大指数午后再度集体转跌
重疾险买了4年了建议退保吗?
山西武乡庭院经济激活乡村振兴“一池春水”
报告:全球机器人产业保持增长态势 中国成为重要推动力
廖新海获批出任江西金租总裁
旅行平台出境游咨询量暴增,国庆假期机酒价格或比暑期更贵
8小时手术让六旬阿姨重新挺起脊梁 长高4厘米
港股异动 | 倩碧控股(08367)涨超12% 一季度股东应占亏损342.2万港元 同比收窄64%
吞食孔明传第一章黄巾之乱流程攻略 吞食孔明传黄皓
70城新房价格连跌两月 房价进入下行调整通道?
工行德阳西干道支行:慧眼识骗 真情服务获好评
大模型+求解器:阿里大模型数学工具MindOpt Copilot将于近期上线
中国天眼又有新发现了!观测到脉冲星辐射新形态
特斯拉又一次打响价格战 奔驰CEO:绝不随意调价
剑指比亚迪秦PLUS DM-i!吉利银河L6配置公布:亏电油耗4.55升
买1得9:京东+腾讯视频等9大联合会员198元(七夕狂促 )
医腐巨浪背后
南京生态版Citywalk来啦!
赤峰黄金股票8月16日主力资金净流入202.03万元
内马尔转会!姆巴佩续约巴黎,哈维如释重负,马儿去沙漠更开心!
新版本爆料①丨排位拉力赛焕新回归,全新失重赛道玩法来袭!
丁家寨弯弓古树茶特点
决心之下 第二季番外:埃尔法篇:7(传说之下同人小说)
【读书笔记】趣味数学及编程拓展(第2版) 第3章
补齐最后一环,促进退役风电、光伏设备循环利用指导意见出台
国轩高科:公司2022年度利润分配方案为:不派发现金红利、不送红股、不以公积金转增股本
女子称带3娃买4张票登机被拒,网友:卖票的时候你咋不说!
菏泽首个“全站无亭+智慧云舱”智慧收费站启用!
目的地从上海变日本?网传国航一航班“被劫”?客服辟谣
夏威夷野火遇难者升至110人 起火原因或涉及电力公司
今日紫金矿业股票行情(2023年8月14日)
今日纸黄金价格走势图最新查询(2023年8月17日)
“思南文学之家”首次亮相上海书展,16场读书会点亮阅读之光!
创业集团控股(02221):潘轶旻获委任为薪酬委员会的成员
荣耀Magic V2持续供不应求,CEO赵明呼吁消费者不要加价购买
8月15日10点 西安多地区可预约HPV疫苗
蓟古“组团式”帮扶专家开展下乡义诊活动
多地群众生产生活秩序加快恢复 多项重点工程已复工
TA:巴萨未就坎塞洛与曼城有正式接触,德科更喜欢弗雷斯内达
红旗E001内饰官图及更多信息公布!配8155芯片,最大续航800公里
武汉军山街道拧紧燃气“安全阀” 积极开展燃气安全宣传活动
第7届南博会集中签约项目338个 协议投资额4040亿元
深圳出台措施助力民营经济 支持民间投资参与盘活城市老旧资源
欧盟将提前数月实现冬季储气目标 但能源供应形势依旧脆弱