简单工厂模式
标签:设计模式

简单工厂模式(SimpleFactory)

简单工厂模式属于类的创建型模式,又叫静态工厂方法模式,通过专门定义的一个类来负责创建其他类的实例,被创建出来的类通常具有共同的父类。

1. 模式中包含的角色及其职责

1.1 工厂(Creator)

简单工厂模式的核心,它负责实现创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需的产品对象

AnimalFactory

package com.liuyao;

/**
 * @author liuyao
 * @date 2018/07/29
 */
public class AnimalFactory {
    public static Animal createAnimal1(String type) throws Exception {
        if (type.equals("Dog")){
            return Dog.class.newInstance();
        }else if (type.equals("Cat")){
            return Cat.class.newInstance();
        }else{
            throw new Exception("type is illegal");
        }
    }

    public static Animal createAinmal2(String type) throws Exception {
        return (Animal) Class.forName(type).newInstance();
    }
}

1.2 抽象(Product)

简单工厂模式所创建的所有对象的父类,它负责描述实例所有的公共接口。

Animal

package com.liuyao;

/**
 * @author liuyao
 * @date 2018/07/29
 */
public interface Animal {
    public void eat();
}

1.3 具体产品(Concrete Product)

简单工厂模式所创建的具体实例对象

Cat

package com.liuyao;

/**
 * @author liuyao
 * @date 2018/07/29
 */
public class Cat implements Animal {
    @Override
    public void eat() {
        System.out.println("cat eat");
    }
}

Dog

package com.liuyao;

/**
 * @author liuyao
 * @date 2018/07/29
 */
public class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("dog eat");
    }
}


Main

package com.liuyao;

public class Main {

    public static void main(String[] args) throws Exception {
	// write your code here
        Dog dog= (Dog) AnimalFactory.createAnimal1("Dog");
        dog.eat();
        Cat cat= (Cat) AnimalFactory.createAinmal2("com.liuyao.Cat");
        cat.eat();
    }
}

/**
dog eat
cat eat
*/

2. 优缺点

用户使用时可以直接使用工厂类去创建所需的实例,而不需要了解这些对象是如何创建以及组织的。

缺点是工厂类集中了所有实例的创建逻辑,高内聚上做的不好,当系统的具体产品类增多时,工厂类也要做出相应的修改,扩展性不好。

  • 2 min read

CONTRIBUTORS


  • 2 min read