前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >菜鸟之路:设计模式入门篇——简单工厂模式

菜鸟之路:设计模式入门篇——简单工厂模式

作者头像
良月柒
发布2019-03-19 16:13:10
3210
发布2019-03-19 16:13:10
举报

简单工厂模式

1.什么是工厂?

用一个单独的类来做这个类创造实例的过程,这就是工厂。

2.它解决了那些问题? 简单工厂模式解决了对象的创建问题。

3.什么时候去使用简单工厂模式?

用于已知某些条件后,对类的选择,而这些类都是同一父类的子类。

计算器示例:

1.抽象一个基类(JiSuan),提供一个计算方法;

JiSuan类:

/** * 作者:LKP * 时间:2018/7/12 * 计算器抽象类 */public abstract class JiSuan {private double numOne;private double numTwo;
public double getNumOne() {   return numOne;}
public void setNumOne(double numOne) {   this.numOne = numOne;}
public double getNumTwo() {   return numTwo;}
public void setNumTwo(double numTwo) {   this.numTwo = numTwo;}
//计算结果public double JiSuan(){   return 0d;}}

2.创建两个子类基础该基类,分别是JiaFa子类和JianFa子类,同时实现计算结果方法;

JiaFa子类:

/** * 作者:LKP * 时间:2018/7/12 * 加法类 */public class JiaFa extends JiSuan {
@Overridepublic double JiSuan() {   return getNumOne()+getNumTwo();}}

JianFa子类:

/** * 作者:LKP * 时间:2018/7/12 * 减法类 */public class JianFa extends JiSuan {@Overridepublic double JiSuan() {   return getNumOne()-getNumTwo();}}

3.创建一个计算工厂类(JiSuanFactory)

/** * 作者:LKP * 时间:2018/7/12 * 计算工厂类 */public class JiSuanFactory {public static JiSuan createJiSuan(String yunSuanFu){JiSuan open = null;    switch (yunSuanFu){   case "+":open = new JiaFa();   break;   case "-":open = new JianFa();    break;}    return open;}}

4.客户端代码

加法计算:

/** * 作者:LKP * 时间:2018/7/12 */public class MainClass {public static void main(String[] args){JiSuan jiSuan = JiSuanFactory.createJiSuan("+");jiSuan.setNumOne(10);jiSuan.setNumTwo(20);double number = jiSuan.JiSuan();System.out.println("计算结果为:"+number);}}

运行结果:

减法计算:

/** * 作者:LKP * 时间:2018/7/12 */public class MainClass {public static void main(String[] args){JiSuan jiSuan = JiSuanFactory.createJiSuan("-");jiSuan.setNumOne(10);jiSuan.setNumTwo(20);   double number = jiSuan.JiSuan();System.out.println("计算结果为:"+number);}}

运行结果:

如果需要加入除法和乘法,只需新增一个除法子类和乘法子类,修改一下工厂类里面的switch选择器即可。

优点:工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建那个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。

缺点:由于工厂类集中了所有实例的创建逻辑,这就直接导致一旦这个工厂出了问题,所有的客户端都会受到牵连;而且由于简单工厂模式的产品是基于一个共同的抽象类或者接口,这样一来,一旦产品的种类增加的时候,既有不同的产品接口或者抽象类的时候,工厂类就需要判断何时创建何种种类的产品,这就和创建何种种类的产品相互混淆在了一起,违背了单一职责,导致系统丧失灵活性和可维护行。而且更重要的是,简单工厂模式违背了“开发封闭原则”,就是违背了“系统对扩展开放,对修改关闭”的原则,因为当我新增加一个产品的时候必须修改工厂类,相应的工厂类就需要重新编译一遍。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员的成长之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简单工厂模式
    • 1.什么是工厂?
      • 用一个单独的类来做这个类创造实例的过程,这就是工厂。
        • 2.它解决了那些问题? 简单工厂模式解决了对象的创建问题。
          • 3.什么时候去使用简单工厂模式?
            • 用于已知某些条件后,对类的选择,而这些类都是同一父类的子类。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档