博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之简单工厂模式
阅读量:5038 次
发布时间:2019-06-12

本文共 2207 字,大约阅读时间需要 7 分钟。

What:

SimpleFactroyPattern,由一个工厂类根据传入的参数,动态的决定创建哪一个产品类(这些产品类继承自一个类或者接口)。

Why

封装创建对象的细节,客户端调用时只需要关注所需的对象,而不必关心创建的细节,减少类之间的依赖。

How

简单工厂中包含的角色及其职责

工厂类(Factory):简单工厂模式的核心,负责实现创建所有势力的内部逻辑,工厂类可以直接由外接调用以创建所需的对象。

抽象产品类(Product):简单工厂模式中所有具体产品类的父类,它负责描述所有实例共有的特性及行为。

具体产品类(ConcreteProduct):简单工厂模式中创建咪表,所有创建的对象都是充当这个觉得的某个具体类的实例。

 

使用简单工厂模式前:类图如下所示,客户端对于具体产品类的依赖性很强。

  假设现在有这么一个情景:现在有一家公司老板想要听取一下几个岗位对于公司未来的发展的看法,所以需要不同岗位的员工谈一下相关的看法板,老板分析一下各岗位员工对于公司发展前景的看法。

在现实的生活当中,稍微大一点的企业,老板都是会有助理的,老板告诉助理,然后让助理去通知各个员工。其实在这里老板就是客户端,秘书就是工厂类,员工是抽象产品类,具体岗位的员工就是具体产品类。

如果没有秘书,老板要怎么做?老板需要知道各个岗位的相关员工,然后通知他们完成这么一项任务,那么公司各个岗位员工老板都必须要清楚,而且要清楚他们的联系方式,再一一通知相关的员工,如果现实中老板这样事必躬亲,那得到了员工的意见,估计也不会有太多的时间思考公司怎么发展。

那么我们增加了一个老板助理会有什么好处呢?由秘书来完成通知员工的细节,里面怎么喊道相关员工由秘书来完成,老板不必关心,只需要告诉秘书现在需要哪个岗位的人来面谈,哪个岗位就是这里传入工厂方法的参数了。

 

使用工厂模式后:客户端对于具体产品类不再依赖,达到解耦的目的。

抽象产品类:员工类

abstract class Employee    {        //提出意见         internal abstract void PutForwardSuggestions();    }

具体产品类:工程师

class Engineer : Employee    {        internal override void PutForwardSuggestions()        {            Console.WriteLine("工程师代表意见:定期进行技能培训,提升员工的业务水平");        }    }

具体产品类:财务

class Accountant : Employee    {        internal override void PutForwardSuggestions()        {            Console.WriteLine("财务代表意见:引入财务软件,将使公司的财务管理更加的方便");        }    }

工厂类:秘书

class Assistant    {        //找到老板制定岗位的员工        internal static Employee LookForEmployee(string positionName)        {            Employee result = null;            if (positionName == "engineer")            {                result = new Engineer();            }            else if (positionName == "accountant")            {                result = new Accountant();            }            return result;        }    }

客户端调用:

class Program    {        static void Main(string[] args)        {            Employee firstEmpolyee = Assistant.LookForEmployee("engineer");            firstEmpolyee.PutForwardSuggestions();            Employee secondEmpolyee = Assistant.LookForEmployee("accountant");            secondEmpolyee.PutForwardSuggestions();            Console.ReadLine();        }    }

运行结果:

简单工厂模式的缺点:所有的创建逻辑集中在工厂类中,随着具体产品类不断的增加时,每一次都需要对工厂类进行修改,违反了开放封闭原则,扩展性不好。

转载于:https://www.cnblogs.com/XzcBlog/p/4221653.html

你可能感兴趣的文章
sql 基础语句
查看>>
CF717A Festival Organization(第一类斯特林数,斐波那契数列)
查看>>
控件发布:div2dropdownlist(div模拟dropdownlist控件)
查看>>
Oracle composite index column ordering
查看>>
kaggle竞赛
查看>>
区块链入门教程
查看>>
npm常用命令
查看>>
南海区行政审批管理系统接口规范v0.3(规划)4.2.【queryExpireList】当天到期业务查询...
查看>>
[置顶] 细说Cookies
查看>>
[wp7软件]wp7~~新闻资讯,阅读软件下载大全! 集合贴~~~
查看>>
生成指定位数随机数的方法
查看>>
Essential C++学习笔记
查看>>
where,having与 group by连用的区别
查看>>
【MySQL】MySQL锁和隔离级别浅析二 之 INSERT
查看>>
Oracle T4-2 使用ILOM CLI升级Firmware
查看>>
4.14上午
查看>>
数据分析 -- 白话一下什么是决策树模型(转载)
查看>>
Java SPI机制原理和使用场景
查看>>
web前端java script学习2017.7.18
查看>>
删除TXPlatform
查看>>