简单工厂模式(重要):
又叫静态工厂方法,可根据传递不同的参数返回不同类的对象,专门定义一个类来创建其他类的实例,这些类的实例通常具有共同的父类(接口,抽象类)。在工厂类中只需要简单的逻辑判断,不关心业务处理,满足单一职责原则
简单工厂模式适用环境:
1.工厂类负责创建的对象较少
2.不关心对象创建的细节,甚至类名都不需要记住,只需要知道对象对应的参数
简单工厂模式的优点:
1.可根据传递不同的参数获取不同类的对象,将对象的创建和使用分离
2.无须知道创建对象的类名,只需知道传递参数与对象的对应关系
简单工厂模式的缺点:
1.增加了系统中类的个数,复杂度增大
2.增加新的对象时,需要修改工厂类的判断逻辑,违背了开闭原则
3.当需要创建的对象较多时,工厂判断逻辑过于复杂,不易于扩展和维护
4.由于工厂类使用了静态方法,无法形成继承结构而使用多态
简单工厂模式的例子:
Animal接口父类
/**
* @Description: TODO
* @author doudou
* @date 2019年10月6日
*
*/
public interface Animal {
void eat();
}
Cat子类
/**
* @Description: TODO
* @author doudou
* @date 2019年10月6日
*
*/
public class Cat implements Animal{
/**
* @Description: TODO
* @author doudou
* @date 2019年10月6日
* @throws
* @return
* @see creation.StaticFactoryMethod.Animal#eat()
*/
@Override
public void eat() {
System.out.println("小猫吃鱼。。。");
}
}
Dog子类
/**
* @Description: TODO
* @author doudou
* @date 2019年10月6日
*
*/
public class Dog implements Animal{
/**
* @Description: TODO
* @author doudou
* @date 2019年10月6日
* @throws
* @return
* @see creation.StaticFactoryMethod.Animal#eat()
*/
@Override
public void eat() {
System.out.println("小狗吃骨头。。。");
}
}
工厂类
/**
* @Description: TODO
* @author doudou
* @date 2019年10月6日
*
*/
public class AnimalFactory {
public static void main(String[] args) {
Animal animal = AnimalFactory.getAnimal("dog");
animal.eat();
}
public static Animal getAnimal(String name) {
if (name.equalsIgnoreCase("dog")) {
return new Dog();
}
if (name.equalsIgnoreCase("cat")) {
return new Cat();
}
return null;
}
}
简单工厂模式扩展:
1.可以将工厂的静态方法写到抽象父类中或者某个类充当自己的工厂,在自己的静态方法中返回自己的对象