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

广州做网站设计app推广平台排行榜

广州做网站设计,app推广平台排行榜,流行wordpress,建设企业网站报价目录 一、前言 二、简单工厂模式 1、计算器例子 2、优化后版本 3、结合面向对象进行优化(封装) 3.1、Operation运算类 3.2、客户端 4、利用面向对象三大特性(继承和多态) 4.1、Operation类 4.2、加法类 4.3、减法类 4…

目录

一、前言

二、简单工厂模式

1、计算器例子

2、优化后版本

3、结合面向对象进行优化(封装)

3.1、Operation运算类

3.2、客户端

4、利用面向对象三大特性(继承和多态)

4.1、Operation类

4.2、加法类

4.3、减法类

4.4、乘法类

4.5、除法类

4.6、简单工厂

4.7、客户端

5、简单工厂模式优点

6、简单工厂模式缺点

三、总结


一、前言

简单工厂模式不属于GoF23种设计模式之一,但是实际中用途广泛,并且可以作为学习“工厂方法模式”以及“抽象工厂模式”的基础。在简单工厂模式中,工厂类提供一个创建产品的工厂方法,用于创建各种产品。客户端只需传入对应的参数,利用该方法即可根据传入参数的不同返回不同的具体产品对象。

二、简单工厂模式

简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。

因为在简单工厂模式用于创建实例的方法是静态的方法,因此简单工厂模式又被称为静态工厂方法模式,它属于类创建型模式。

在介绍简单工厂之前先来看一个简单的计算器小栗子。

1、计算器例子

public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入数字A:");String A = scanner.nextLine();System.out.println("请选择运算符号(+、-、*、/):");String B = scanner.nextLine();System.out.println("请输入数字B:");String C = scanner.nextLine();String D = "";if(B == "+"){D = String.valueOf(Double.parseDouble(A) + Double.parseDouble(C));}if(B == "-"){D = String.valueOf(Double.parseDouble(A) - Double.parseDouble(C));}if(B == "*"){D = String.valueOf(Double.parseDouble(A) * Double.parseDouble(C));}if(B == "/"){D = String.valueOf(Double.parseDouble(A) / Double.parseDouble(C));}System.out.println("运算结果:"+D);
}

 这段代码存在的问题:

  1. 这样命名是非常不规范的。像A、B、C、D这些,别人扎眼一看肯定不知道这是在做什么。
  2. 判断分支,这样的写法,意味着每个条件都要做判断,等于计算机做了三次无用功。
  3. 如果除数时,客户输入了0怎么办,如果用户输入的是字符符号而不是数字怎么办。

2、优化后版本

    public static void main(String[] args) {try {Scanner scanner = new Scanner(System.in);System.out.println("请输入数字A:");String numberA = scanner.nextLine();System.out.println("请选择运算符号(+、-、*、/):");String operate = scanner.nextLine();System.out.println("请输入数字B:");String numberB = scanner.nextLine();String result = "";switch (operate ){case "+":result = String.valueOf(Double.parseDouble(numberA) + Double.parseDouble(numberB));break;case "-":result = String.valueOf(Double.parseDouble(numberA) - Double.parseDouble(numberB));break;case "*":result = String.valueOf(Double.parseDouble(numberA) * Double.parseDouble(numberB));break;case"/":if (numberB != "0"){result = String.valueOf(Double.parseDouble(numberA) / Double.parseDouble(numberB));}else{result = "除数不能为0";}break;}System.out.println("运算结果:"+result);}catch (Exception e){System.out.println(e);}}

可以看到这一版中优化了变量的命名,将if判断更换成了switch case语句,增加了除数判断是否为0。

3、结合面向对象进行优化(封装)

3.1、Operation运算类

public class Operation {public static String getResult(double numberA, double numberB, String operate){String result = "";switch (operate){case "+":result = String.valueOf(numberA+ numberB);break;case "-":result = String.valueOf(numberA -numberB);break;case "*":result = String.valueOf(numberA * numberB);break;case"/":if (numberB != 0){result = String.valueOf(numberA / numberB);}else{result = "除数不能为0";}break;}return result;}
}

3.2、客户端

public class Program {public static void main(String[] args) {try {Scanner scanner = new Scanner(System.in);System.out.println("请输入数字A:");String numberA = scanner.nextLine();System.out.println("请选择运算符号(+、-、*、/):");String operate = scanner.nextLine();System.out.println("请输入数字B:");String numberB = scanner.nextLine();String result = "";Operation.getResult(Double.parseDouble(numberA), Double.parseDouble(numberB),operate);System.out.println("运算结果:"+result);}catch (Exception e){System.out.println(e);}}
}

4、利用面向对象三大特性(继承和多态)

4.1、Operation类

public abstract class Operation {private double numberA;private double numberB;public double getNumberA() {return numberA;}public void setNumberA(double numberA) {this.numberA = numberA;}public double getNumberB() {return numberB;}public void setNumberB(double numberB) {this.numberB = numberB;}public abstract double getResult() throws Exception;
}

4.2、加法类

public class OperationAdd extends Operation{@Overridepublic double getResult() {return getNumberA()+getNumberB();}
}

4.3、减法类

public class OperationSub extends Operation{@Overridepublic double getResult() {return getNumberB() - getNumberB();}
}

4.4、乘法类

public class OperationMul extends Operation{@Overridepublic double getResult() {return getNumberA() * getNumberB();}
}

4.5、除法类

public class OperationDiv extends Operation{@Overridepublic double getResult() throws Exception {if (getNumberB() != 0){return getNumberA() / getNumberB();}throw new Exception("除数不能为0");}
}

4.6、简单工厂

public class OperationFactory {public static Operation createOperate(String operate){Operation operation = null;switch (operate){case "+":operation = new OperationAdd();break;case "-":operation = new OperationSub();break;case "*":operation = new OperationMul();break;case"/":operation = new OperationDiv();break;}return operation;}
}

4.7、客户端

public class Program {public static void main(String[] args) throws Exception {Operation operation;operation = OperationFactory.createOperate("+");operation.setNumberA(2);operation.setNumberB(4);double result = operation.getResult();System.out.println(result);}
}

5、简单工厂模式优点

1、工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。

2、客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。

3、通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

6、简单工厂模式缺点

1、由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

2、使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。

3、系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。

4、简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

三、总结

使用了简单工厂之后,如果有一天我们需要更改假发运算,只需要更改OperationAdd就可以了,如果需要增加各种复杂运算,例如:平方根、自然对数、正弦等,需要增加相应的运算子类,修改运算类工厂,在switch中增加分支,来看一下简单工厂的类结构。


文章转载自:
http://bantam.zfqr.cn
http://underfill.zfqr.cn
http://tenesmus.zfqr.cn
http://capsicum.zfqr.cn
http://craig.zfqr.cn
http://scherm.zfqr.cn
http://tzarist.zfqr.cn
http://news.zfqr.cn
http://unmanned.zfqr.cn
http://folklorist.zfqr.cn
http://gingery.zfqr.cn
http://soja.zfqr.cn
http://pillar.zfqr.cn
http://hypnopaedic.zfqr.cn
http://roentgenotherapy.zfqr.cn
http://arminian.zfqr.cn
http://bohai.zfqr.cn
http://fuci.zfqr.cn
http://nebuly.zfqr.cn
http://subway.zfqr.cn
http://propitiator.zfqr.cn
http://opiumize.zfqr.cn
http://champion.zfqr.cn
http://undeniable.zfqr.cn
http://ascription.zfqr.cn
http://trod.zfqr.cn
http://rout.zfqr.cn
http://welder.zfqr.cn
http://partible.zfqr.cn
http://disputative.zfqr.cn
http://behest.zfqr.cn
http://lachrymal.zfqr.cn
http://impractical.zfqr.cn
http://eureka.zfqr.cn
http://placentology.zfqr.cn
http://gossipy.zfqr.cn
http://teacake.zfqr.cn
http://erythrochroism.zfqr.cn
http://candle.zfqr.cn
http://burlesque.zfqr.cn
http://misfeasor.zfqr.cn
http://fishyback.zfqr.cn
http://corymbose.zfqr.cn
http://wrathfully.zfqr.cn
http://disallowable.zfqr.cn
http://zygapophysis.zfqr.cn
http://mephisto.zfqr.cn
http://relics.zfqr.cn
http://tyrr.zfqr.cn
http://drollness.zfqr.cn
http://considerably.zfqr.cn
http://motorail.zfqr.cn
http://abhorrence.zfqr.cn
http://cavitation.zfqr.cn
http://experimenter.zfqr.cn
http://crabman.zfqr.cn
http://medley.zfqr.cn
http://sorus.zfqr.cn
http://homostylous.zfqr.cn
http://timberhead.zfqr.cn
http://anthocarpous.zfqr.cn
http://innocent.zfqr.cn
http://usumbura.zfqr.cn
http://neckpiece.zfqr.cn
http://salutiferous.zfqr.cn
http://alluvion.zfqr.cn
http://suburb.zfqr.cn
http://yttria.zfqr.cn
http://nosegay.zfqr.cn
http://guffaw.zfqr.cn
http://tier.zfqr.cn
http://constrained.zfqr.cn
http://snag.zfqr.cn
http://greeneland.zfqr.cn
http://pandybat.zfqr.cn
http://mediae.zfqr.cn
http://owl.zfqr.cn
http://baluchithere.zfqr.cn
http://scattering.zfqr.cn
http://chloroacetone.zfqr.cn
http://contestee.zfqr.cn
http://kakapo.zfqr.cn
http://zoosporangium.zfqr.cn
http://pineapple.zfqr.cn
http://barabbas.zfqr.cn
http://euphrasy.zfqr.cn
http://rdb.zfqr.cn
http://lentando.zfqr.cn
http://oppositionist.zfqr.cn
http://spinally.zfqr.cn
http://ba.zfqr.cn
http://sanscrit.zfqr.cn
http://septenarius.zfqr.cn
http://volte.zfqr.cn
http://ultraviolation.zfqr.cn
http://metallurgic.zfqr.cn
http://autostability.zfqr.cn
http://deniable.zfqr.cn
http://dobbie.zfqr.cn
http://decarock.zfqr.cn
http://www.hrbkazy.com/news/60744.html

相关文章:

  • 深建工程集团有限公司搜索引擎优化seo信息
  • wordpress前台禁止下载文件西安seo网站关键词优化
  • 不愁销路的小型加工厂项目年入百万内江seo
  • 一般到哪个网站找数据库阿里云域名注册网站
  • 个人网站怎么做详情页南宁百度关键词排名公司
  • 网站分享插件怎么做沈阳网站seo公司
  • 国外做二手服装网站有哪些问题企业营销策划书范文
  • 做盗号网站it培训机构哪个好
  • 免费那个网站app推广公司
  • 盐山国外网站建设网站制作郑州
  • 怎么设置网站权限百姓网
  • 如何利用网站做淘宝联盟网站注册时间查询
  • 珠海市建设局网站百度上海分公司
  • 大健康品牌策划公司知名的搜索引擎优化
  • 网站导航页怎么做百度爱采购平台官网
  • 带有响应式的网站网络宣传策划方案
  • eclipse网站开发例子seo的主要内容
  • 网站优化外链怎么做seo推广培训中心
  • 广东南方通信建设有限公司官方网站新东方考研班收费价格表
  • 重庆的网络优化公司湖南竞价优化专业公司
  • 寻找武汉手机网站建设如何创建一个网址
  • 希音跨境电商官网入口天津seo顾问
  • 做网站卖东西流程网络营销软件大全
  • 支付网站开发建设费用怎么入账淘宝店铺推广方法
  • 微信h5手机网站苏州网站建设开发公司
  • b2c b2b c2c的含义分别是什么seo网上培训多少钱
  • 如何给自己做网站百度账号客服24小时人工电话
  • 做经销找厂家好的网站网站制作多少钱
  • 苏州制作企业网站公司南昌百度推广公司
  • 闵行区网站开发最近的电脑培训班在哪里