美文网首页
工厂模式(2)简单工厂模式下篇

工厂模式(2)简单工厂模式下篇

作者: 疯狂的JAVA | 来源:发表于2018-12-11 15:16 被阅读0次

         前言:今天我们一起来学习一种简单而且又有逼格的技术,设计模式中的工厂模

式。虽然工作的时候我们使用的框架都是封装好的,直接参考API写代码就Ok了,但是

总有一些公司美其名曰要考察面试者的基本功,于是就会问问设计模式或者算法,框架

源码。其实没有那个公司想着让自己的公司员工成为大牛,原因也很简单你的技术牛了

肯定想要更高的工资,公司不想支付高工资又会导致员工跳槽。

          问题描述:公司开发一个宠物管理系统,项目经理让小张写一个波斯猫的类,后

面业务需求发生更改,在创建对象的时候需要初始化name属性,于是所有调用波斯猫创

建类的代码都需要发生修改,于是小张把对象的创建交给了波斯猫的工厂,完美的解决

了这个问题,但是新的问题又来了,项目经理告诉小张添加一个埃及猫类,小张开始

写代码.

public class TestNoFactory {

            public static void main(String[] args) {

                     PersianCat persianCat = new PersianCat();

                     EgyptCat egyptCat = new EgyptCat();

            }

}

class EgyptCat {

           public void run() {

                     System.out.println("EgyptCat.run()");

            }

 }

class PersianCat {

            public void run() {

                      System.out.println("PersianCat.run()");

            }

}

   在代码省略掉工厂情况下,小张的代码面临着两个问题:

             1、需要对猫类进行抽象出一个父类或者父接口,因为别的同事写的代码所有

                   涉及到波斯猫作为参数传递的时候都需要用埃及猫重载,如果两种猫还好,

                   如果数量大到一定程度,工作量也大到无法想象,这个时候需要传入这些

                   类的父类

             2、别的同事创建猫对象只需要创建父类对象即可,那么用户调用创建方法并

                   传入猫的种类,通过工厂模式自动返回创建好的对象即可.

小张意识到这个问题之后于是将代码修改如下

public class TestEasyFactory {

                 public static void main(String[] args) {

                          //向工厂模式传参并创建对象

                       Cat cat = CatFactory.create(CatType.PersianCat);

                }

}

class CatFactory {

                public static Cat create(CatType type) {

                        Cat cat = null;

                        //判断猫的类型创建对象

                         if (CatType.PersianCat == type) {

                        cat = new PersianCat();

                         } else if (CatType.Egypt == type) {

                         cat = new EgyptCat();

                        }

                        return cat;

                 }

}

interface Cat {

}

class EgyptCat implements Cat {

              public void run() {

                               System.out.println("EgyptCat.run()");

               }

}

class PersianCat implements Cat {

               public void run() {

                               System.out.println("PersianCat.run()");

               }

}

enum CatType {

              PersianCat, Egypt

}

        通过对上述代码的观察,我们大概可以发现两件事情

                1、提前对同一类事物进行抽象,将来即使添加别的子类也可以继续使用

                2、工厂创建的对象的返回值为同一类型的父类,根据传入的类型判断创建

                      具体子类对象,这也是OOP的体现,而且还可以在父类或者父接口中定

                      义让子类必须实现的抽象方法,以上两点就是简单工厂模式的核心思想。

         作为一个好的魔术师你永远不知道他会从箱子里拿出什么变成什么,可怕的是客户

是最好的魔术师,于是客户说增加需求了,我们需要将猫的种类再添加五种,那么你感觉

这会给小张的开发带来什么难点呢?

            请继续关注我哦

           下集预告:《工厂模式(3)方法工厂模式》



热门推荐:  一种简单且又有逼格的技术    https://www.jianshu.com/p/3d9c3902d78a

                     线程不安全?                         https://www.jianshu.com/p/24c4508d971f

                     著名的Log4j 是怎么来的        https://www.jianshu.com/p/7407e44ed702

相关文章

  • 工厂模式(2)简单工厂模式下篇

    前言:今天我们一起来学习一种简单而且又有逼格的技术,设计模式中的工厂模 式。虽然工作的时候我们使用的框架都...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 设计模式 工厂模式

    工厂模式 工厂模式三大类1、简单工厂模式(静态工厂方法模式)2、工厂方法模式3、抽象工厂模式(Kit模式) 简单工...

  • php设计模式之工厂模式

    1. 工厂模式分类 工厂模式具体可分为三类模式:简单工厂模式,工厂方法模式,抽象工厂模式; 2. 简单工厂模式 又...

  • Java设计模式——Factory工厂模式

    Factory工厂模式分为:1)简单工厂模式(Simple Factory) --- 普通工厂模式2)工厂方法模式...

  • 设计模式-工厂模式

    1、简单工厂模式 2、工厂方法模式 3、抽象工厂模式

  • 工厂方法模式

    1.简单工厂模式 先看一下简单工厂模式 代码: 2.工厂方法模式 简单工厂模式大家比较熟悉也比较简单,但是简单工厂...

  • 工厂模式

    工厂模式包含三种模式:简单工厂模式、工厂方法模式和抽象工厂模式。 简单工厂模式 定义简单工厂模式:由一个工厂类根据...

  • Java设计模式——工厂模式

    工厂模式简单工厂模式工厂方法模式抽象工厂模式 1.简单工厂模式 1.基本介绍1)简单工厂模式也叫静态工厂模式,是属...

  • [Android]三种工厂模式总结。

    Android中,工厂模式分为三种:简单工厂模式、工厂方法模式、抽象工厂模式。 一.简单工厂模式。 定义:简单工厂...

网友评论

      本文标题:工厂模式(2)简单工厂模式下篇

      本文链接:https://www.haomeiwen.com/subject/xdfehqtx.html