设计模式(八)——工厂模式

简单工厂

一、定义:

通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

二、特点:

  • 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。如例子中的Driver类。
  • 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。如例中的Car接口。
  • 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现,如例子中的Benz、Bmw类。

三、情景:

创建多种汽车,并对其创建对象的代码进行封装。

1、汽车接口类(Car)

public interface Car {

    public void drive();

}

2、BMW类(BMW)

public class BMW implements Car{

    public BMW() {
        this.drive();
    }

    public void drive() {
        System.out.println("宝马车在路上");
    }
}

3、Benz类(Benz)

public class Benz implements Car{

    public Benz() {
        this.drive();
    }

    public void drive() {
        System.out.println("奔驰车在路上");
    }
}

4、工厂类(Factory)

public class Factory {


    public static Car produceCar(String carName){
        Car car = null;
        if("Benz".equals(carName)){
            car = new Benz();
            return car;
        }else if("BMW".equals(carName)){
            car = new BMW();
            return car;
        }else{
            return null;
        }
    }

}

5、工厂测试类(FactoryTest)

public class FactoryTest {

    public static void main(String[] args) {
        Car car = MyFactory.produceCar("Benz");
        Car car2 = MyFactory.produceCar("BMW");
    }

}

工厂方法

一、定义:

通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

二、特点:

  • 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
  • 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。
  • 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
  • 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

三、在简单工厂上的改进:

1、工厂类(Factory)

public abstract class Factory {

    public abstract Car produceCar();

}

2、Benz工厂类(BenzFactory)

public class BenzFactory extends Factory{

    public Car produceCar() {
        Car car = new Benz();
        return car;
    }
}

3、BMW工厂类(BMWFactory)

public class BMWFactory extends Factory{

    public Car produceCar() {
        Car car = new BMW();
        return car;
    }

}

抽象工厂

Spring中的工厂模式

原文地址:https://www.cnblogs.com/fonxian/p/5792350.html