之前已经介绍过工厂模式了,说白了就是创建实例的一个东西,目的就是让客户端不需要判断自己具体要使用的类,传入一个标识就行。
简单工厂模式缺点:在增加一个类的情况下需要修改工厂类。违背了开放封闭原则
下面说说工厂方法模式:
自己的理解:就是把new出哪个对象来使用的工作又移到了客户端,那有的人可能会问,这不是脱裤子放屁吗,直接在客户端new对象就好了,给每一个类都配置一个工厂类,不累吗?直接new不就好了,为啥用弄个工厂类,专门new呢?原因是你接下来需要学习抽象工厂模式,如果单就看这种方式,我觉得真的就是脱裤子放屁,所以等学完抽象工厂模式就明白了为啥这么弄了。
代码实现:
简单工厂模式:
package factory.simplefactory;
public class Eat {
public static void main(String[] args) {
Animal animal = AnimalFactory.createAnimal("dog");
animal.jiao();
/*
汪汪汪!
*/
}
}
class AnimalFactory {
public static Animal createAnimal(String animalStr) {
Animal animal = null;
switch (animalStr) {
case "dog":
animal = new Dog();
break;
case "cat":
animal = new Cat();
break;
}
return animal;
}
}
interface Animal {
void jiao();
}
class Cat implements Animal {
@Override
public void jiao() {
System.out.println("喵喵喵!");
}
}
class Dog implements Animal {
@Override
public void jiao() {
System.out.println("汪汪汪!");
}
}
工厂方法模式:
package factory.factoryfunction;
public class Eat {
public static void main(String[] args) {
Animal animal1 = CatFactory.createAnimal();
animal1.jiao();
Animal animal2 = DogFactory.createAnimal();
animal2.jiao();
/**
* 喵喵喵!
* 汪汪汪!
*/
}
}
interface Factory {
public Animal createAnimal();
}
class CatFactory {
public static Animal createAnimal() {
Animal animal = new Cat();
return animal;
}
}
class DogFactory {
public static Animal createAnimal() {
Animal animal = new Dog();
return animal;
}
}
interface Animal {
void jiao();
}
class Cat implements Animal {
@Override
public void jiao() {
System.out.println("喵喵喵!");
}
}
class Dog implements Animal {
@Override
public void jiao() {
System.out.println("汪汪汪!");
}
}