简单工厂模式概述
又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例。
优点:客户端不需要在负责对象的创建,从而明确了各个类的职责
缺点:这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利 于后期的维护。
Animal 类
public abstract class Animal {
public abstract void eat();
}
Cat 类
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼..");
}
}
Dog 类
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃肉...");
}
}
Demo 测试类
public static void main(String[] args) {
Cat c = new Cat();
c.eat();
Dog d = new Dog();
d.eat();
}
思考:上面造狗对象、猫对象,都是很简单,有的时候,我们造出对象是一个非常繁琐的过程
public class AnimalFactory {
public AnimalFactory()
{
}
public static Dog createDog()
{
return new Dog();
}
public static Cat createCat()
{
return new Cat();
}
}
public static void main(String[] args) {
// Cat c = new Cat();
// c.eat();
//
// Dog d = new Dog();
// d.eat();
//
// System.out.println("----------------");
// 工厂有了后,就可以直接使用工厂来造了
Dog d = AnimalFactory.createDog();
d.eat();
Cat c = AnimalFactory.createCat();
c.eat();
}
改进版2:
public class AnimalFactory {
public AnimalFactory()
{
}
public static Animal createAnimal(String type)
{
if("dog".equals(type))
{
return new Dog();
}
else if("cat".equals(type))
{
return new Cat();
}
else
{
return null;
}
}
}
public static void main(String[] args) {
Animal a = AnimalFactory.createAnimal("dog");
a.eat();
Animal a2 = AnimalFactory.createAnimal("cat");
a2.eat();
}
思考:下面这个代码可以运行成功吗?
为何报错呢?
解决方案就是:先判断
Animal a3 = AnimalFactory.createAnimal("pig");
if(a3!=null)
{
a3.eat();
}
else
{
System.out.println("别傻逼了,该动物无法生产!");
}