工厂模式

简单工厂模式有一个缺陷,那就是不符合OCP开闭原则,当我们想生产一辆新品种车型时,必须修改简单工厂类源码。而工厂模式由于一种工厂只生产一种产品。当我们需要生产一辆新品种汽车,只需要新建一个新品类的工厂即可,即对增加开放,对修改关闭。符合开闭原则。

在UML图上可以清晰的看出,工厂模式只比简单工厂模式多一个角色:抽象工厂,其可以是抽象类也可以是接口,还是以生产汽车为例举例说明工厂方法设计模式的原理

public class FactoryDemo {
  interface Car {
    void run();

    void stop();

    String brand();
  }

  static class BMW540Li implements Car {

    @Override
    public void run() {
      System.out.println("BMW540Li启动");
    }

    @Override
    public void stop() {
      System.out.println("BMW540Li停止");
    }

    @Override
    public String brand() {
      return "宝马";
    }
  }

  static class AudiA7 implements Car {

    @Override
    public void run() {
      System.out.println("AudiA7启动");
    }

    @Override
    public void stop() {
      System.out.println("AudiA7停止");
    }

    @Override
    public String brand() {
      return "奥迪";
    }
  }

  interface CarFactroy{
    Car factory();
  }

  static class BMWFactory implements CarFactroy{
    @Override
    public Car factory() {
      return new BMW540Li();
    }
  }

  static class AudiFactory implements CarFactroy{
    @Override
    public Car factory() {
      return new AudiA7();
    }
  }


  public static void main(String[] args) {
    BMWFactory bmwFactory = new BMWFactory();
    Car car1 = bmwFactory.factory();
    car1.run();
    car1.stop();
    System.out.println("我的品牌是:"+car1.brand());

    System.out.println("----------------------");

    AudiFactory audiFactory = new AudiFactory();
    Car car2 = audiFactory.factory();
    car2.run();
    car2.stop();
    System.out.println("我的品牌是:"+car2.brand());
  }
}


BMW540Li启动
BMW540Li停止
我的品牌是:宝马
----------------------
AudiA7启动
AudiA7停止
我的品牌是:奥迪


 
原文地址:https://www.cnblogs.com/sstone/p/8465961.html