工厂模式简介

  • 模式属于创立型模式,它提供了一种创建对象的最佳形式。
  • 在工厂模式中,创建对象时不会对客户端裸露创立逻辑,并且是通过应用一个独特的接口来指向新创建的对象。
动态简略工厂模式
接口Animal
public interface Animal {    String getName();}
子类Dog和Cat
public class Dog implements Animal {    @Override    public String getName() {        return "Dog";    }}public class Cat implements Animal {    @Override    public String getName() {        return "Cat";    }}
工厂类
public class AnimalFactory {    //动态简略工厂模式    public static Animal getAnimal(String animal) {        if (animal != null) {            if (animal.equals("Dog")) {                return new Dog();            } else if (animal.equals("Cat")) {                return new Cat();            }        }        return null;    }}
测试类
public class Test {    public static void main(String[] args) {        Animal animal1 = AnimalFactory.getAnimal("Dog");        Animal animal2 = AnimalFactory.getAnimal("Cat");        if (animal1 != null) {            System.out.println(animal1.getName());        }        if (animal2 != null) {            System.out.println(animal2.getName());        }        /**         * 输入后果:         * Dog         * Cat         */    }}
测试后果
DogCat

工厂办法模式
接口Animal
public interface Animal {    String getName();}
子类Dog和Cat
public class Dog implements Animal {    @Override    public String getName() {        return "Dog";    }}public class Cat implements Animal {    @Override    public String getName() {        return "Cat";    }}
接口AnimalFactory
public interface AnimalFactory {    Animal getAnimal();}
子类CatFactory和DogFactory
public class CatFactory implements AnimalFactory{    @Override    public Animal getAnimal() {        return new Cat();    }}public class DogFactory implements AnimalFactory{    @Override    public Animal getAnimal() {        return new Dog();    }}
测试类
public class Test {    public static void main(String[] args) {        Animal animal1 = new DogFactory().getAnimal();        Animal animal2 = new CatFactory().getAnimal();        if (animal1 != null) {            System.out.println(animal1.getName());        }        if (animal2 != null) {            System.out.println(animal2.getName());        }        /**         * 输入后果:         * Dog         * Cat         */    }}
测试后果
DogCat