设计模式——工厂模式(简单工厂)
一、什么是工厂模式:
在人类社会发展中,起初人们生活所需品都是自供自给,饭菜,衣服,家具都是由自己制作,这样感觉人们要和很多行业有接触,很麻烦。后来逐渐出现了各种”工厂“,由他们代替你去生产所需品,你要什么式样的东西只要告诉它们,它们就会给你生产好,这样你可以抽出大量精力去做其他重要的事了。
在程序世界中也一样,以前每当我们需要什么实例对象,都是自己new出来的,这样的坏处是会和很多类有牵连,耦合度高(要new一只狗,就要引入Dog类,要new一只猫,就要引入Cat类),那我们完全可以像真实世界中一样,把这项工作交给”工厂“去办,我们要创建什么类型的实例,只要给工厂传入某种参数告知他们就行了,工厂会替你创建实例对象。这便是工厂模式思想。工厂模式分三种:简单工厂模式,工厂方法模式,抽象工厂模式。本篇讲解简单工厂模式。
二、简单工厂模式:
简单工厂模式是工厂模式中最简单简陋的形式。它的工厂类就是一个实实在在的具体工厂类,里面有逻辑判断,它会判断你传入的不同参数而创建不同的实例。按理说这样没问题,但这样是不完美的,请看例子:
//抽象产品类:定义一类产品,接口或抽象类 public interface Animal { public void run(); //接口只声明方法,不实现 }
//具体产品类1:Dog类实现Animal接口 public class Dog implements Animal { public void run() { System.out.println("狗run!"); } }
//具体产品类2:Cat类实现Animal接口 public class Cat implements Animal { public void run() { System.out.println("猫run!"); } }
//具体工厂类:传入参数,生成不同的动物。 public class Factory { public Animal create(String str) { if(str.equals("dog")) return new Dog(); if(str.equals("cat")) return new Cat(); } }
//主程序:要用到实例的类 public class Main() { public static void main(String[] args) { Factory fact = new Factory(); Dog dog = (dog)fact.create("dog"); //传入dog参数,生产对象 Cat cat = (cat)fact.create("cat"); } }
该简单工厂的例子的不足之处是:当产品种类增加时,程序员除了新建这个具体产品类外,还得在工厂类里增添判断逻辑,也就是说要修改已经存在的类,这样不利于维护。如果改变了需求,我们的处理原则是创建新的类,在新的地方写新需求,而不是去修改原来的代码。所以,我们改进了简单工厂模式,想出了工厂方法模式。工厂方法模式到底是怎么样的?请见下篇。