1、概述
简单工厂模式 又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例
2、 优缺点
优点
客户端不需要在负责对象的创建,从而明确了各个类的职责
缺点
这个静态工厂类负责所有对象的创建,如果有新的对象增加,或者某些对象的创建方式不同,就需要不断的修改工厂类,不利于后期的维护
代码:
定义一个 Animal 动物抽象类
// 动物抽象类 public abstract class Animal { public abstract void eat(); // 吃 的 功能 }
定义一个Dog类
// 狗类 public class Dog extends Animal { @Override public void eat() { System.out.println("笨狗吃骨头..."); } }
定义一个Rabbit 类
// 兔类 public class Rabbit extends Animal { @Override public void eat() { System.out.println("兔子爱吃隔壁草..."); } }
代码1:常规的方式:
public class AnimalDemo { public static void main(String[] args) { //1、 具体类 Dog d = new Dog(); Rabbit r = new Rabbit(); d.eat(); r.eat(); } }
结果:
笨狗吃骨头...
兔子爱吃隔壁草...
代码2:通过工厂造各种 动物对象
定义一个 AnimalFactory 动物工厂 类
public class AnimalFactory { // 1、构造方法私有 private AnimalFactory() { } // 2.1 创建一个 Dog类 public static Dog createDog() { return new Dog(); } // 2.2 创建一个 Rabbit类 public static Rabbit createRabbit() { return new Rabbit(); } }
测试
public class AnimalDemo { public static void main(String[] args) { // 简单工厂 Dog d = AnimalFactory.createDog(); Rabbit r = AnimalFactory.createRabbit(); d.eat(); r.eat(); } }
结果:
笨狗吃骨头...
兔子爱吃隔壁草...
代码3:对工厂改进后
package com.monkey1028; public class AnimalFactory { // 1、构造方法私有 private AnimalFactory() { } // 2、 public static Animal createAnimal(String type) { if("dog".equals(type)) { return new Dog(); } if("rabbit".equals(type)) { return new Rabbit(); }else { return null; } } }
测试类:
public class AnimalDemo { public static void main(String[] args) { // 通过 AnimalFactory 动物工厂 造相应的动物对象 Animal a = AnimalFactory.createAnimal("dog"); a.eat(); a = AnimalFactory.createAnimal("rabbit"); a.eat(); // 要是传入动物工厂中不存在的动物对象呢? // 会产生空指针异常,所以要做判断 System.out.println(); a = AnimalFactory.createAnimal("pig"); if(a != null) { a.eat(); }else { System.out.println("该工厂还暂时不具备生产该动物的资质......"); } } }
结果:
笨狗吃骨头...
兔子爱吃隔壁草...
该工厂还暂时不具备生产该动物的资质......