ITPub博客

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

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

作者:孤独键客 时间:2020-05-13 09:55:26 0 删除 编辑

点击上方,轻松关注!!


简单工厂模式

1.什么是工厂?

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

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

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

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

 

计算器示例:

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

JiSuan类:

  1. /**

  2. * 作者:LKP

  3. * 时间:2018/7/12

  4. * 计算器抽象类

  5. */

  6. public abstract class JiSuan {

  7. private double numOne;

  8. private double numTwo;


  9. public double getNumOne() {

  10.   return numOne;

  11. }


  12. public void setNumOne(double numOne) {

  13.   this.numOne = numOne;

  14. }


  15. public double getNumTwo() {

  16.   return numTwo;

  17. }


  18. public void setNumTwo(double numTwo) {

  19.   this.numTwo = numTwo;

  20. }


  21. //计算结果

  22. public double JiSuan(){

  23.   return d;

  24. }

  25. }

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

JiaFa子类:

  1. /**

  2. * 作者:LKP

  3. * 时间:2018/7/12

  4. * 加法类

  5. */

  6. public class JiaFa extends JiSuan {


  7. @Override

  8. public double JiSuan() {

  9.   return getNumOne()+getNumTwo();

  10. }

  11. }

JianFa子类:

  1. /**

  2. * 作者:LKP

  3. * 时间:2018/7/12

  4. * 减法类

  5. */

  6. public class JianFa extends JiSuan {

  7. @Override

  8. public double JiSuan() {

  9.   return getNumOne()-getNumTwo();

  10. }

  11. }

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

  1. /**

  2. * 作者:LKP

  3. * 时间:2018/7/12

  4. * 计算工厂类

  5. */

  6. public class JiSuanFactory {

  7. public static JiSuan createJiSuan(String yunSuanFu){

  8. JiSuan open = null;

  9.    switch (yunSuanFu){

  10.   case "+":

  11. open = new JiaFa();

  12.   break;

  13.   case "-":

  14. open = new JianFa();

  15.    break;

  16. }

  17.    return open;

  18. }

  19. }

4.客户端代码

加法计算:

  1. /**

  2. * 作者:LKP

  3. * 时间:2018/7/12

  4. */

  5. public class MainClass {

  6. public static void main(String[] args){

  7. JiSuan jiSuan = JiSuanFactory.createJiSuan("+");

  8. jiSuan.setNumOne(10);

  9. jiSuan.setNumTwo(20);

  10. double number = jiSuan.JiSuan();

  11. System.out.println("计算结果为:"+number);

  12. }

  13. }

运行结果:

减法计算:

  1. /**

  2. * 作者:LKP

  3. * 时间:2018/7/12

  4. */

  5. public class MainClass {

  6. public static void main(String[] args){

  7. JiSuan jiSuan = JiSuanFactory.createJiSuan("-");

  8. jiSuan.setNumOne(10);

  9. jiSuan.setNumTwo(20);

  10.   double number = jiSuan.JiSuan();

    System.out.println("计算结果为:"+number);

    }

    }

运行结果:

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

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

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

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69902700/viewspace-3120343/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
一个不羁的码农,终身学习者。公众号「程序员的成长之路」。目前就职于一家游戏公司,主要负责服务器端,以及web系统的开发工作,对Java相关知识比较擅长。

注册时间:2018-12-14

  • 博文量
    793
  • 访问量
    119763