简介:把创建实例的过程交给工厂。创建对象时不会对客户端暴露创建逻辑,并且通过接口来指向新创建的对象。
实例:
创建一个animal接口,然后创建dog、cat、pig类来实现animal,并且创建一个animalFactory用来创建动物实例。
/**
* 定义animal接口
*/
public interface Animal(){
void eat();
}
/**
* 定义dog类实现animal接口
*/
public class Dog implements Animal(){
@Override
public void eat(){
System.out.println("狗吃肉!");
}
}
/**
* 定义cat类实现animal接口
*/
public class Cat implements Animal(){
@Override
public void eat(){
System.out.println("猫吃鱼!");
}
}
/**
* 定义dog类实现animal接口
*/
public class Pig implements Animal(){
@Override
public void eat(){
System.out.println("猪吃饲料!");
}
}
/**
* 定义工厂类,用于创建动物实例
* */
public class AnimalFactory{
public Animal getAnimal(String animalType){
switch(animalType){
case:"dog":
return new Dog();
case:"cat":
return new Cat();
case:"pig":
return new Pig();
}
}
}
/**
* 测试
*/
public class Test(){
public static void main(String[] args){
AnimalFactory factory = new AnimalFactory();
Animal dog = factory.getAnimal("dog");
dog.eat();
Animal dog = factory.getAnimal("cat");
cat.eat();
Animal dog = factory.getAnimal("pig");
pig.eat();
}
}
优点:
1.解耦合,把对象的创建和使用分离开。
2.代码复用,不用每个地方都写复杂的初始化代码。
缺点:
不符合开闭原则,添加新类的时候必须修改工厂类。