阅读本文大概需要6分钟
一、什么是简单工厂模式
简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,一个抽象的产品类,可以派生出多个具体的产品类,它们都具有共同的父类。
我们再来看下简单工厂模式的UML图:
二、简单工厂模式的构成
三、实例演示
我们做这个一个分析,有一家造车厂它里面可以造车的各个零件,在这个厂里,有专门造轮胎的车间,有专门造发动机的车间还有换门造车玻璃的车间,那么我们想一下,这些车间是不是都是归属于这个造车厂的,每个车间是不是都有自己的职能。
假设我们现在组装车间要组装一辆车,他们需要发动机、轮胎、玻璃等部件,那么作为组装车的人,他们根本不关心你怎么做,他们只关心这个东西做没做好,做好了赶紧递过来,我这边要用。
我们先来创建一个造车厂的类:
public interface CarFactory { void ability(); }
我们既然有了造车厂,那么我们地下的车间部门只需要实现这个类,去完成各自的职能就可以了
玻璃车间:
public class Glass implements CarFactory{ @Override public void ability() { System.out.println("玻璃已经生产好了"); } }
发动机车间:
public class Engine implements CarFactory { @Override public void ability() { System.out.println("发动机制造好了"); } }
轮胎车间:
public class AutoTyre implements CarFactory{ @Override public void ability() { System.out.println("轮胎已经生产好了"); } }
既然已经有个产品类和具体的产品,那么接下来我们是不是要做一个工厂去进行生产啊,工厂类是整个模式的关键,它需要进行必要的逻辑判断,根据消费者给的信息,它需要决定来创建哪个对象的实例,消费者不再关心如何创建具体的产品,他只需要负责好需要生产的产品就行了。
public class Product { public static CarFactory product(String skill) { CarFactory carFactory = null; switch (skill) { // 制造轮胎 case "autoTyre": carFactory = new AutoTyre(); break; // 制造发动机 case "engine": carFactory = new Engine(); break; // 制造玻璃 case "glass": carFactory = new Glass(); } return carFactory; } }
在这里我们可以发现,所有类都有一个共同的父类,到这里大家应该可以发现,我们平时所说的封装、继承、多态在这里是不是已经体现出来了(这里面我没用继承,是因为Java是单继承的,所以我这里改为了接口实现的方式,因为Java是可以多实现的,这样有利于我们程序的扩展)。
接下里,我们来看下组装车间是怎么来索要所需的部件的
public class CarMain { public static void main(String[] args) { // 生产一个发动机 CarFactory engine = Product.product("engine"); engine.ability(); // 生产一个玻璃 CarFactory glass = Product.product("glass"); glass.ability(); // 生产一个轮胎 CarFactory autoTyre = Product.product("autoTyre"); autoTyre.ability(); } }
我们先来看下结果:
如果我们想要再去生产其他的一些部件,我们只需要去实现造车厂的类,完成自己特定的职能就可以了,也不会去跟其他的车间有任何的交集,我们只需要完成我们的需要做的东西就好。
四、模式优点
五、简单工厂模式的缺点
六、使用场景
本文分享自微信公众号 - 一个程序员的成长(xiaozaibuluo),作者:一个程序员的成长
原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。
原始发表时间:2018-10-31
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句