需要一个接口Animal
public interface Animal {
void cry();
}
两个实现类Cat和Dog实现了Animal 的cry方法
public class Cat implements Animal {
@Override
public void cry() {
System.out.println("喵喵喵");
}
}
public class Dog implements Animal{
@Override
public void cry() {
System.out.println("汪汪汪");
}
}
建立动物工厂AnimalFactory
public class AnimalFactory {
public Animal getAnimal(String animal) {
if("dog".equals(animal)) {
return new Dog();
}else if("cat".equals(animal)) {
return new Cat();
}
return null;
}
}
测试:
public class Test1 {
public static void main(String[] args) {
Animal animal = new AnimalFactory().getAnimal("cat");
animal.cry();
Animal animal2 = new AnimalFactory().getAnimal("dog");
animal2.cry();
}
}
结果
优点:
1.用户只需要知道名称就可以创建一个对象,不需要在意构造方法的参数
2.如需增加产品,只用多加实现类
3.用户只用关心接口
缺点:
多加实现类和添加创建工厂的方法内容实际违背了开闭原则