测试类
package org.westos.常用的设计模式.简单工厂模式;
//这是一个简单工厂模式的测试类
/**
* 简单工厂模式:
* 优点:
* 不需要再创建具体的对象,把创建的工作交给了工厂类(这个类私有化了构造方法,所提提供的方法为静态方法,调用使用类名.方法名)
* 缺点:
* 如果有新的类增加,构造方法不同,就需要去修改工厂类,不符合设计原则开闭原则
* */
public class Demo {
public static void main(String[] args) {
Animal cat = AnimalFactory.createAnimal("Cat");
cat.eat();
Animal dog = AnimalFactory.createAnimal("Dog");
dog.eat();
System.out.println("----------------");
Animal a = AnimalFactory.createAnimal("Cat");
a.eat();
a = AnimalFactory.createAnimal("Dog");
a.eat();
a = AnimalFactory.createAnimal("Pig");
if(a!=null) {
a.eat();
}else {
System.out.println("工厂类不提供该类");
}
}
}
抽象类
package org.westos.常用的设计模式.简单工厂模式;
//这是一个抽象类,提供了一个Animal类
public abstract class Animal {
//这是抽象类Animal的共有功能
public abstract void eat();
}
具体类
package org.westos.常用的设计模式.简单工厂模式;
//这是一个具体类猫,继承了Animal类
public class Cat extends Animal {
//重写Animal类的抽象方法
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
package org.westos.常用的设计模式.简单工厂模式;
//这是一个具体类狗,继承了Animal类
public class Dog extends Animal {
//重写Animal类的抽象方法
@Override
public void eat() {
System.out.println("狗吃骨头");
}
}
工厂类
package org.westos.常用的设计模式.简单工厂模式;
//这是一个工厂类,用来创建各种具体类的对象
//采用的是多态的方式,Animal 对象名 = new 具体类();
public class AnimalFactory {
private AnimalFactory(){}
public static Animal createAnimal(String str) {
if(str.equals("Cat")) {
return new Cat();
}else if(str.equals("Dog")) {
return new Dog();
}
return null;
}
}