一、介绍
简单工厂模式属于类的创建型模式,又叫静态工厂方法模式。通过专门定义一个类创建其他类的实例,被创建的实例通常具有共同父类。
优点:简单工厂模式实现了对象的“创建”和“使用”的分离,实现了接口编程,遵循了DIP原则(依赖倒置原则,实际上就是面向接口编程)
缺点:但违背了单一原则(一个工厂生产太多产品);增加新的产品对象时须修改工厂类静态方法违背了开闭原则(就是实体对拓展开放,对修改关闭)
二、模式中包含的角色及其职责
1、工厂(Creator)角色
简单工厂模式的核心,它负责实现创建所有的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象
2、抽象(Product)角色
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口
3、具体产品(Concrete Product)角色
简单工厂模式所创建的具体实例对象
三、使用场景
需要生产的产品/对象比较单一,需要不复杂的场景
四、类图
五、代码实现
产品接口
package com.design.simplefactory;
/**
* 动物抽象类
* 行为:名字
*/
public interface Animal {
public void name();
}
测试+产品实现类+工厂类(其实开发都是分开,不在一个类中,这里只是为了更好展示)
package com.design.simplefactory;
/**
* @Description
* 测试类
* @Author
* @Date 2019/6/121:41
*/
public class Test {
public static void main(String[] args) {
/*Animal dog = SimpleFactory.getDog();
Animal cat = SimpleFactory.getCat();
dog.name();
cat.name();*/
//优化
Animal animal = SimpleFactory.getAnimal("a");
animal.name();
}
}
class Dog implements Animal {
@Override
public void name() {
System.out.println("我是狗");
}
}
class Cat implements Animal {
@Override
public void name() {
System.out.println("我是猫");
}
}
//简单工厂类
class SimpleFactory {
/* public static Animal getCat() {
return new Cat();
}
public static Animal getDog() {
return new Dog();
}*/
//优化
public static Animal getAnimal(String name) {
if (name.equalsIgnoreCase("dog")) {
return new Dog();
} else if (name.equalsIgnoreCase("cat")) {
return new Cat();
}
return null;
}
}
这个工厂模式,当有新动物添加时,需要修改原码,不满足开放关闭原则