定义一个具体的工厂类负责创建一些类的实例
优点:客户端不需要负责对象的创建,从而明确各个类的职责
缺点:这个静态工厂类负责所有对象的创建,如果有新的对象的增加,或者某些对象的创建方式不同,就需要不断修改工厂类,不利于后期维护
package day25;
public abstract class Animal {
public abstract void eat();
}
/**
*
*/
package day25;
/**
* @author Dk
*
*/
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃肉");
}
}
/**
*
*/
package day25;
/**
* @author Dk
*
*/
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
package day25;
public class AnimalFactory {
private AnimalFactory() {} //私有构造函数,不让其他类创建本类对象
/*
//创建狗对象
public static Dog createDog() {
return new Dog();
}
//创建猫对象
public static Cat createCat() {
return new Cat();
}
*/
public static Animal createAnimal(String name) {
if (name.equals("dog")) {
return new Dog();
}else if (name.equals("cat")) {
return new Cat();
}else {
return null;
}
}
}
package day25;
public class Dk7Factory {
//简单工厂设计模式
public static void main(String[] args) {
//不用自己创建对象
/*
Dog d = AnimalFactory.createDog(); //获取狗对象
Cat c = AnimalFactory.createCat();
d.eat();
c.eat();
*/
Animal a1 = AnimalFactory.createAnimal("dog"); //获取狗对象
Animal a2 = AnimalFactory.createAnimal("cat");
a1.eat();
a2.eat();
Animal a3 = AnimalFactory.createAnimal("pig");
if (a3 != null) {
a3.eat();
}else {
System.out.println("没有这个动物");
}
}
}
//输出
狗吃肉
猫吃鱼
没有这个动物