工厂模式,比较经常使用,属于建立型模式,也就是主要是用来建立对象的。工厂模式,有三种,主要分为:java
其中,本文要讲的就是,简单工厂模式,可是简单工厂模式,并非属于GoF
讲的23种设计模式中。简单工厂模式,也叫静态工厂方法模式。简单而言,就是有一个具体的工厂类,用来生产不一样类型的对象,而这些对象,都有类似的特色,它们都实现同一个接口。设计模式
何时应该使用工厂模式?为何须要工厂模式呢?app
工厂模式主要是用来生成不一样的对象,也就是屏蔽了对象生成的时候的复杂性,使用的时候不须要知道对象是怎么生成的,而只须要关注要生成什么对象。若是构造一个对象特别的费劲,而咱们又常常须要构造生成这个对象,那么使用工厂模式是比较有利的。咱们都知道,设计模式主要就是为了设计出更加简洁,易懂,方便维护,方便拓展的代码。测试
若是一个很复杂的对象,要在多个地方构建,那么要是改动一次,咱们就须要找出全部引用的地方,逐一修改,那会很麻烦。ui
简单工厂模式主要有三种角色:设计
假设如今有一个果园,用来种植各类水果,可是每一种水果种植的方式又不同。首先,先定义一个接口Fruit
:3d
public interface Fruit { public void process(); }
定义三种水果Apple
,Pear
,Orange
:code
public class Apple implements Fruit{ public void process() { System.out.println("I am an Apple"); } }
public class Pear implements Fruit{ public void process() { System.out.println("I am a Pear"); } }
public class Orange implements Fruit{ public void process() { System.out.println("I am an Orange"); } }
建立一个工厂类:对象
public class FruitFactory { public static Fruit getFruit(String name) { if ("Apple".equalsIgnoreCase(name)) { return new Apple(); } else if ("Pear".equalsIgnoreCase(name)) { return new Pear(); } else if ("Orange".equalsIgnoreCase(name)) { return new Orange(); } return null; } }
测试代码以下:blog
public class FruitTest { public static void main(String[] args) { Fruit apple = FruitFactory.getFruit("Apple"); apple.process(); Fruit pear = FruitFactory.getFruit("Pear"); pear.process(); Fruit orange = FruitFactory.getFruit("Orange"); orange.process(); } }
测试结果以下:
这样的写法,若是后续再来了一种水果,那么只须要实现接口,同时在工厂中增长一个case
便可。
优势:
凡事都有优劣,简单工厂方法的缺点在于:
从以上的优劣,咱们能够知道,其实若是产品建立过程比较复杂,并且个数很少,都是依靠某些参数来建立的话,抽象出简单工厂模式,实际上是比较有利的一种作法。