java设计模式之创建型模式-简单工厂模式

简单工厂设计模式

概念

简单工厂模式又称静态工厂方法模式.

实质是“工厂方法模式的一个特例,定义了一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行."

适用性

下列情况可以考虑使用工厂方法模式:

  1. 创建对象需要大量重复的代码。

  2. 创建对象需要访问某些信息,而这些信息不应该包含在复合类中。

  3. 创建对象的生命周期必须集中管理,以保证在整个程序中具有一致的行为。

UML

java设计模式之创建型模式-简单工厂模式_第1张图片

例子


一个汽车接口类,包含启动和停止两个方法:

  
  
  
  
  1. public interface Car {
  2. public void run();
  3. public void stop();
  4. }


現在要生产三辆车,它们都实现接口Car里的run和stop方法,并有自己的行为特征,这里为了简单就各打印一句话.

奔驰:

  
  
  
  
  1. public class Benz implements Car {
  2. @Override
  3. public void run() {
  4. System.out.println("Benz 奔驰启动了...");
  5. }
  6. @Override
  7. public void stop() {
  8. System.out.println("Benzͣ 奔驰停止了...");
  9. }
  10. }


福特:

  
  
  
  
  1. public class Ford implements Car {
  2. @Override
  3. public void run() {
  4. System.out.println("Ford 福特启动了...");
  5. }
  6. @Override
  7. public void stop() {
  8. System.out.println("Fordͣ 福特停止了...");
  9. }
  10. }


丰田:

  
  
  
  
  1. public class Toyota implements Car {
  2. @Override
  3. public void run() {
  4. System.out.println("Toyota 丰田启动了...");
  5. }
  6. @Override
  7. public void stop() {
  8. System.out.println("Toyotaͣ 丰田停止了...");
  9. }
  10. }


虽然说要生产三辆汽车,但是没有汽车工厂怎么生产呢?对,现在需要一个生产汽车的工厂类:

  
  
  
  
  1. public class CarFactory {
  2. public static Car newCarInstance(String type)
  3. throws InstantiationException, IllegalAccessException, ClassNotFoundException {
  4. // 使用反射得到具体的实现类
  5. // 实现工厂和具体实现类分离,只需添加具体实现类即可,无需改动工厂类
  6. return (Car) Class.forName(type).newInstance();
  7. }
  8. }

我们看到这个生产汽车的工厂类实例化对象是通过反射机制实现的,并根据参数的不同选择实现不同的具体对象,这有什么好处呢?

好处就是,我们如果要生产一辆宝马的话,就只要创建一个宝马的实体类并实现接口Car即可.

这个工厂类不需要由每个具体产品实现一个自己的具体的工厂类(工厂方法模式需要此步骤),所以可以将工厂方法设置为静态方法。 而且,工厂方法封装了对象的创建过程。

其实上面的代码应该还要添加一个私有的构造方法.


下面贴测试代码:

  
  
  
  
  1. @Test
  2. public void test3() throws Exception {
  3. Car c = CarFactory.newCarInstance("Toyota");
  4. if (c != null) {
  5. c.run();
  6. c.stop();
  7. } else {
  8. System.out.println("没有对应车型...");
  9. }
  10. }

输出:

java设计模式之创建型模式-简单工厂模式_第2张图片

你可能感兴趣的:(设计模式,工厂模式)