欢迎来到Vincentyw的博客

该来的终究会来,该走的也一定会离开。凡事都存在前因后果,因缘成熟了,果报便产生了,无法阻挡。
但是发生过了就会消失,有来就有走,一切都是过客,把握自己当下的因缘,承担起自己该承担的责任,做好眼前该做的事情,做的时候尽全力,过去便放下,放下即自在。

工厂模式之工厂方法

FactoryMethod(工厂方法)

一、工厂方法模式简介

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

注意:

   为了避免简单工厂模式的缺点,不完全满足OCP

  工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。

二、工厂方法模式优缺点比较

优点:

  • 1、一个调用者想创建一个对象,只要知道其名称就可以了
  • 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以
  • 3、屏蔽产品的具体实现,调用者只关心产品的接口

缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。

使用场景:

  • 1、日志记录器
  • 2、数据库访问
  • 3、JDK中Calendar的getInstance方法
  • 4、JDBC中Connection对象的获取
  • 5、spring中IOC容器创建管理bean对象
  • 6、XML解析时的DocumentBuilderFactory创建解析器对象
  • 7、反射中Class对象的newInstance()

注意事项:作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式

三、实现UML类图

四、实现

  步骤1:创建接口

public interface Car {
     void run();
}

 步骤2:创建实现接口的实体类

public class Audi implements Car{
    @Override
    public void run() {
        System.out.println("奥迪运行");
    }
}

public class Byd implements Car{
    @Override
    public void run() {
        System.out.println("比亚迪运行");
    }
}

 步骤3:创建工厂方法接口

//工厂方法,可以增加任意产品
public interface CarFactory {
    public Car createCar();
}

 步骤4:创建实现工厂接口的工厂类

public class AudiCarFactory implements CarFactory{
    @Override
    public Car createCar() {
        return new Audi();
    }
}

public class BydCarFactory implements CarFactory {
    @Override
    public Car createCar() {
        return new Byd();
    }
}

 步骤5:调用者调用

/**
 * 工厂方法:用来生产同一等级结构中的固定产品
 * @author yw
 */
public class FactoryDemo02 {
    public static void main(String[] args) {
        Car car = new AudiCarFactory().createCar();
        car.run();
        car = new BydCarFactory().createCar();
        car.run();
//      car = new BenzCarFactory().createCar();
//      car.run();
    }

}

 步骤6:运行程序,观察结果

奥迪运行
比亚迪运行

 

posted on 2020-03-26 21:27  VincentYew  阅读(176)  评论(0)    收藏  举报

导航