设计模式之工厂模式

来源:互联网 发布:河南民生频道网络直播 编辑:程序博客网 时间:2024/06/09 20:41

设计模式之工厂模式

简介

工厂模式,设计模式的一种,主要用于生产对象(工厂嘛,就是用来生产物品的,只是这里的物品就是我们的对象。

应用场景

在没有接触工厂模式之前,我们一般在需要用到对象的时候就使用new操作符直接创建一个对象,这种方式虽然方便,但是却存在一定的弊端:对象的创建跟对象的使用紧密结合在一起,这样带来的一个问题就是对象的使用者需要直接参与对象的创建,对象的创建过程越复杂,对象的使用者需要参与的程度就越深(可是对象的使用者只是需要使用该对象,并不需要知道该对象是怎么产生的,对否?),这个时候,工厂模式就派上用场了。

种类

工厂模式,只是一个抽象的概念,实际上在应用该模式的时候,根据其实现的方式的不用,主要分为三种:

  • 简单工厂模式
  • 工厂方法模式
  • 抽象工厂方法模式(尚未学习)

简单工厂模式

原理及实现

简单工厂模式,是三种实现方式中最简单,也是最好理解的一种,其主要实现方式为提供一个工厂类,然后将对应的创建对象过程交给工厂即可,具体如下代码所示:

    // 定义一个对象接口    interface Car{        void run();    }    // 分别对应的实现 Audi    class Audi implements Car{        @Override        public void run() {            System.out.println("Audi");        }    }    // Benz    class Benz implements Car{        @Override        public void run() {            System.out.println("Benz");        }    }    // 汽车工厂类    class CarFactory {        // 提供对外的访问入口,直接通过该方法即可以创建对象        public static Car getCar(String name){            if("Benz".equals(name)){                return new Benz();            }else if("Audi".equals(name)){                return new Audi();            }else{                return null;            }        }    }

这样,当需要汽车的时候,客户只需要通过工厂,并且提供所要的汽车的品牌就能获得对应的对象,这跟现实生活中是吻合的,当我们需要一个汽车的时候,一般是到工厂中跟他们要一个,而不是说自己参与建造汽车的整个过程。

优缺点

  • 优点:工厂方法的优点正如上面所讲述到的,对使用者屏蔽了实现的细节,使得对象的使用与对象的创建分离

  • 缺点:工厂方法的缺点也是非常明显的,从上面工厂中获得对象的方式可以看出,当需要添加新的品牌的汽车(比如说比亚迪)的时候,我们就不得不重新编辑该工厂类,这在某种意义上来说是比较不好的做法,原因在于,当你编辑的时候,可能会由于你的修改而导致原先正常运行的代码出现Bug,这也就是设计原则中的对扩展开放,对修改关闭 原则

工厂方法模式

实现及原理

工厂方法模式可以理解为简单工厂模式的扩充,具体表现为,随着汽车种类的增加,原本的工厂方法已经无法生产总类如此之多的汽车了(宝马各个系、奔驰各个系、奥迪各个系等等),于是乎,将原本由一个工厂方法负责生产的对象抽取出来,由对应的品牌的工厂进行生产(比如宝马汽车的工厂、奔驰汽车的工厂等等),这样,当需要增加新的品牌的汽车的时候,就不需要修改原本的代码了。

这里为了节省空间,复用了上面的Car类以及Benz, Audi类,增加新的抽象工厂接口CarFactory,以及对应的实现类,如下所示

interface CarFactory{    Car getCar();}class BenzFactory implements CarFactory{    @Override    public Car getCar() {            return new Benz();    }}class AduiFactory implements CarFactory{    @Override    public Car getCar() {            return new Audi();    }}

从上面的代码中我们可以看出,这看上去更加合理,毕竟,奔驰汽车由奔驰汽车的工厂来生产,宝马汽车由宝马汽车的工厂来生产。

优缺点

  • 优点:工厂方法模式看上去更加的合理,也更加的符合日常的规范,将不同类别的产品的生成交付给各自的工厂进行生产,而不是全部由一个工厂来进行生产,更加有利于代码的维护以及升级
  • 缺点:增加了许多新的类,代码看上去更加复杂。

总结

这一小节主要学习了简单工厂模式以及工厂方法模式,并且通过具体的代码感受到了工厂模式给我们的带来的好处(屏蔽对象的生成过程,使得对象的使用以及对象的生产分离),设计模式的学习之路还在继续。

0 0
原创粉丝点击