首页 > 技术文章 > 设计模式——工厂模式(简单工厂)

wangerxiansheng 2014-12-12 11:15 原文

一、什么是工厂模式:

  在人类社会发展中,起初人们生活所需品都是自供自给,饭菜,衣服,家具都是由自己制作,这样感觉人们要和很多行业有接触,很麻烦。后来逐渐出现了各种”工厂“,由他们代替你去生产所需品,你要什么式样的东西只要告诉它们,它们就会给你生产好,这样你可以抽出大量精力去做其他重要的事了。

  在程序世界中也一样,以前每当我们需要什么实例对象,都是自己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");
    }
}

该简单工厂的例子的不足之处是:当产品种类增加时,程序员除了新建这个具体产品类外,还得在工厂类里增添判断逻辑,也就是说要修改已经存在的类,这样不利于维护。如果改变了需求,我们的处理原则是创建新的类,在新的地方写新需求,而不是去修改原来的代码。所以,我们改进了简单工厂模式,想出了工厂方法模式。工厂方法模式到底是怎么样的?请见下篇。

 

推荐阅读