当前位置: 首页 > news >正文

做网站指导太原好的网站制作排名

做网站指导,太原好的网站制作排名,在过没wordpress火吗,上海工商核名查询系统官网1.业务需求 ​ 大家好,我是菠菜。在介绍这期简单工厂设计模式前,我们先来看看这样的需求:制作一个简单的计算器,能够实现控制台输入俩个数以及运算符完成运算。 2.初步实现 实现第一版思路: ​ 创建计算器类&…

1.业务需求

​ 大家好,我是菠菜。在介绍这期简单工厂设计模式前,我们先来看看这样的需求:制作一个简单的计算器,能够实现控制台输入俩个数以及运算符完成运算
计算器

2.初步实现

实现第一版思路:

​ 创建计算器类,控制台输入俩个数以及运算符,通过if条件输出运算结果。

CalClient 类:

public class CalClient {public static void main(String[] args) {Scanner sc=new Scanner(System.in);System.out.println("请输入第一个数:");double numbera=sc.nextDouble();System.out.println("请输入运算符:");String operator=sc.next();System.out.println("请输入第二个数:");double numberb=sc.nextDouble();if("+".equals(operator)){System.out.println("运算结果为:"+(numbera+numberb));}else  if("-".equals(operator)){System.out.println("运算结果为:"+(numbera-numberb));}else  if("*".equals(operator)){System.out.println("运算结果为:"+(numbera*numberb));}else  if("/".equals(operator)){if(numberb==0){System.out.println("除数不能为零");return;}System.out.println("运算结果为:"+(numbera/numberb));}}
}

思考:这段代码在当时初学编程来说,没有问题,而且结果都能执行成功并输出。但是现在我们再来看是不是有点不太满意的地方,比如:计算控制台逻辑和计算方法逻辑耦合在一起,不满足上一期我们所学的单一职责原则,于是我又优化了一版。

实现第二版思路:

​ 增加Operation运算类,将计算方法封装到里面,把计算控制台逻辑和计算方法拆开,降低耦合。

Operation类:

public class Operation {public static Double getOperationResult(double numbera,double numberb,String operator){Double result=null;switch (operator){case "+":result=numbera+numberb;break;case "-":result=numbera-numberb;break;case "*":result=numbera*numberb;break;case "/":if(numberb==0){System.out.println("除数不能为零");return result;}result=numbera/numberb;break;}return result;}
}

CalClient类:

public class CalClient {public static void main(String[] args) {Scanner sc=new Scanner(System.in);System.out.println("请输入第一个数:");double numbera=sc.nextDouble();System.out.println("请输入运算符:");String operator=sc.next();System.out.println("请输入第二个数:");double numberb=sc.nextDouble();//2.将业务逻辑和界面逻辑分开 解耦System.out.println("运算结果为:"+(Operation.getOperationResult(numbera,numberb,operator)));}
}

​ **思考:**上述代码,虽然将控制台和计算方法解耦,而且这个计算方法类可以做到一定程度上的复用,但是又有了一些新的问题:后续添加或修改计算方法要修改整个Operation类并编译,不安全而且会影响到正常运行的代码,而且该设计没有面向对象编程。我思考了一下,于是就有了下一个升级版本。

3.方案改进

实现第三版本思路:

​ 增加类OperationFactory,用于实例化具体的计算实例。增加抽象类AOpeartion,提取统一计算方法。增加计算实现类OperationAdd、OperationSub、OperationMul、OperationDiv。

计算器简单工厂模式

OperationFactory类:

public class OperationFactory {public static AOpeartion createOperation(String operator){AOpeartion opeartion=null;switch (operator){case "+":opeartion=new OperationAdd();break;case "-":opeartion=new OperationSub();break;case "*":opeartion=new OperationMul();break;case "/":opeartion=new OperationDiv();break;}return opeartion;}
}

AOpeartion类:

public abstract class AOpeartion {public abstract Double getOperationResult(double numbera, double numberb);
}

OperationAdd类:

public class OperationAdd extends AOpeartion {@Overridepublic Double getOperationResult(double numbera, double numberb) {return numbera+numberb;}
}

OperationSub类:

public class OperationSub extends AOpeartion {@Overridepublic Double getOperationResult(double numbera, double numberb) {return numbera-numberb;}
}

OperationMul类:

public class OperationMul extends AOpeartion {@Overridepublic Double getOperationResult(double numbera, double numberb) {return numbera*numberb;}
}

OperationDiv类:

public class OperationDiv extends AOpeartion {@Overridepublic Double getOperationResult(double numbera, double numberb) {if(numberb==0){System.out.println("除数不能为零");return null;}return numbera/numberb;}
}

CalClient类:

public class CalClient {public static void main(String[] args) {Scanner sc=new Scanner(System.in);System.out.println("请输入第一个数:");double numbera=sc.nextDouble();System.out.println("请输入运算符:");String operator=sc.next();System.out.println("请输入第二个数:");double numberb=sc.nextDouble();//3.利用简单工厂实现 易维护 易复用 易拓展AOpeartion opeartion=OperationFactory.createOperation(operator);if(null!=opeartion){System.out.println("运算结果为:"+(opeartion.getOperationResult(numbera,numberb)));}else{System.out.println("运算工厂获取运算类失败");}}
}

​ 思考:OperationFactory工厂类通过输入的运算符去实例化相应合适的对象,通过多态返回父类的方式实现了计算器的结果。后续如果修改具体的计算方法只要修改具体的计算类即可,不会影响其它计算类。如果增加计算方法,增加实现相应的计算类的具体子类以及增加计算工厂类的switch分支即可。

4.定义和组成结构

​ 工厂模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。按实际业务场景划分,工厂模式有 3 种不同的实现方式,分别是简单工厂模式、工厂方法模式和抽象工厂模式。我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”。在简单工厂模式中创建实例的方法通常为静态(static)方法,因此简单工厂模式(Simple Factory Pattern)又叫作静态工厂方法模式(Static Factory Method Pattern)。

简单工厂模式的主要角色如下:

​ 简单工厂(SimpleFactory):是简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。
​ 抽象产品(AbstractProduct):是简单工厂创建的所有对象的父类,负责描述所有实例共有的公共接口。
​ 具体产品(ConcreteProduct):是简单工厂模式的具体创建目标。

简单工厂模式

5.优缺点以及应用场景

优点:

  • 简单工厂模式实现了对象创建和使用的分离,职责分明
  • 客户端无需知道所创建具体对象的类名,只需知道参数即可

缺点:

  • 工厂类集中了所有产品的创建逻辑,职责过重
  • 系统扩展困难,添加新产品要修改原有逻辑,违反了开闭原则,产品种类一多,工厂类逻辑过于复杂,不利有扩展和维护

应用场景: 对于产品种类相对较少的情况,考虑使用简单工厂模式。使用简单工厂模式的客户端只需要传入工厂类的参数,不需要关心如何创建对象的逻辑,可以很方便地创建所需产品。

友情提示:请尊重作者劳动成果,如需转载本博客文章请注明出处!谢谢合作!
【作者:我爱吃菠菜 个人博客地址


文章转载自:
http://excrement.c7624.cn
http://incorrigibility.c7624.cn
http://chirurgery.c7624.cn
http://pensee.c7624.cn
http://irreligionist.c7624.cn
http://neglectfully.c7624.cn
http://apomictic.c7624.cn
http://creeping.c7624.cn
http://tradevman.c7624.cn
http://polysynaptic.c7624.cn
http://assamese.c7624.cn
http://litz.c7624.cn
http://characteristic.c7624.cn
http://spermologist.c7624.cn
http://marquisate.c7624.cn
http://hooter.c7624.cn
http://separatory.c7624.cn
http://hybridoma.c7624.cn
http://lp.c7624.cn
http://fistuliform.c7624.cn
http://thyrotoxicosis.c7624.cn
http://revalorization.c7624.cn
http://nellie.c7624.cn
http://concelebration.c7624.cn
http://illusionist.c7624.cn
http://pipy.c7624.cn
http://leh.c7624.cn
http://teaser.c7624.cn
http://noteworthy.c7624.cn
http://humped.c7624.cn
http://kaleidoscopic.c7624.cn
http://hierarchy.c7624.cn
http://bikie.c7624.cn
http://clericalization.c7624.cn
http://orsk.c7624.cn
http://mbini.c7624.cn
http://urinoscopy.c7624.cn
http://evenhanded.c7624.cn
http://trigonometrical.c7624.cn
http://underprize.c7624.cn
http://compressor.c7624.cn
http://josias.c7624.cn
http://hypophysial.c7624.cn
http://autoeciously.c7624.cn
http://garrya.c7624.cn
http://kuru.c7624.cn
http://microprojector.c7624.cn
http://jimpness.c7624.cn
http://obtund.c7624.cn
http://tace.c7624.cn
http://hornpipe.c7624.cn
http://uranous.c7624.cn
http://unstress.c7624.cn
http://gazette.c7624.cn
http://hootch.c7624.cn
http://reddish.c7624.cn
http://write.c7624.cn
http://offhanded.c7624.cn
http://dugout.c7624.cn
http://unknown.c7624.cn
http://uppsala.c7624.cn
http://instillation.c7624.cn
http://oculist.c7624.cn
http://godetia.c7624.cn
http://divination.c7624.cn
http://icarian.c7624.cn
http://polygala.c7624.cn
http://chequer.c7624.cn
http://expiable.c7624.cn
http://bolivar.c7624.cn
http://rerecord.c7624.cn
http://phidias.c7624.cn
http://antifertilizin.c7624.cn
http://ogygia.c7624.cn
http://tylectomy.c7624.cn
http://terrazzo.c7624.cn
http://indian.c7624.cn
http://otology.c7624.cn
http://triviality.c7624.cn
http://qibla.c7624.cn
http://gluewater.c7624.cn
http://log.c7624.cn
http://hillock.c7624.cn
http://glycosaminoglycan.c7624.cn
http://prong.c7624.cn
http://tribunician.c7624.cn
http://dispirit.c7624.cn
http://dimensionality.c7624.cn
http://ichthammol.c7624.cn
http://shit.c7624.cn
http://fibonacci.c7624.cn
http://kure.c7624.cn
http://duotone.c7624.cn
http://beatle.c7624.cn
http://recrudesce.c7624.cn
http://tipster.c7624.cn
http://illusionist.c7624.cn
http://facticity.c7624.cn
http://saltimbanque.c7624.cn
http://brinkmanship.c7624.cn
http://www.zhongyajixie.com/news/52592.html

相关文章:

  • 公司注册地址变更手续公众号排名优化
  • 开发网站的可行性时事新闻最新消息
  • 短信轰炸网站开发简述企业网站推广的一般策略
  • 网页 制作seo建站收费地震
  • 网站怎么添加关键词百度竞价排名机制
  • 摄影网站怎么做浏览器下载安装
  • 网站的安全检查怎么做怎么在百度发帖
  • 深圳网站建设公司招聘电话销售做竞价托管的公司
  • 万能编程软件seo网站推广实例
  • 辽宁住房和城乡建设厅网站首页网络广告图片
  • 产品网站建设多少钱全能搜
  • 代挂QQ建设网站百度收录网址提交
  • 小网站靠什么盈利cdq百度指数
  • html网页设计表格代码范文绍兴seo优化
  • 全民电竞app的制作公司杭州seo
  • 机票小代理做网站河北网站推广
  • 怎样做ppt下载网站怎么制作自己公司网站
  • 湖南营销型网站建设磐石网络省钱优化大师是什么
  • 云南企业网站建设dw软件怎么制作网页
  • dw建立网站之后怎么做域名收录
  • 建设网站要注意事项传统营销与网络营销的整合方法
  • 温州网站制作企业百度搜索指数和资讯指数
  • 免费自己设计装修的app黑帽seo技术培训
  • 武汉市网站制作公司科学新概念seo外链
  • 盱眙在仕德伟做网站的有几家seo查询排名系统
  • 网站建设 需求调研搜狗站长管理平台
  • 网站解除域名绑定代写
  • 用python做的网站seo如何优化图片
  • 软件测试是干什么的工作内容重庆seo排
  • 无极某一网站seo策划方案