工厂模式详解(简单工厂模式)

“我一路向北,离开有你的季节;你说你好累,已无法再爱上谁”

工厂模式的原则就是:
使用工厂来生产对象,生产对象的时候只需要和工厂打交道就可以了,不需要和具体的类进行耦合,达到解耦的目的。

spring中有两大特性,IOCAOP。都知道吧?IOC就是基于工厂模式实现的。
spring中,对象的创建就是通过BeanFactoryApplicationContext 完成的

工厂模式具体涉及到三个类:
抽象产品类:定义了产品的规范,描述了产品的主要特性和功能。
具体产品类:实现或者继承抽象产品的子类。
工厂类:提供了创建产品的方法,调用者通过该方法来创建产品。

先来一个买汽车的案例。
抽象产品类:

package com.app.simple_facrory;

public  abstract class Car {
    public abstract String getName();
}

具体产品类:

package com.app.simple_facrory;

public class BWMCar extends Car {
    @Override
    public String getName() {
        return "宝马汽车";
    }
}

package com.app.simple_facrory;

public class BenchiCar extends Car {
    @Override
    public String getName() {
        return "奔驰汽车";
    }
}

package com.app.simple_facrory;

public class AodiCar extends Car{
    @Override
    public String getName() {
        return "奥迪汽车";
    }
}

工厂类:造汽车的

package com.app.simple_facrory;

public class SimpleCarFactory {
    public Car produceCar(String carName){
        Car car = null;
        if ("宝马汽车".equals(carName)){
            car = new BWMCar();
        }else if ("奔驰汽车".equals(carName)){
            car = new BenchiCar();
        }else if ("奥迪汽车".equals(carName)){
            car = new AodiCar();
        }else {
            System.out.println("没有您想要购买的汽车~");
        }

        return car;
    }
}

4S店: 其实就是4S店去生产汽车的地方运汽车过来然后向客户卖出去

package com.app.simple_facrory;

public class BuyCar {
    public Car produce(String CarName){
        SimpleCarFactory simpleCarFactory = new SimpleCarFactory();
        Car car = simpleCarFactory.produceCar(CarName);
        return car;
    }
}

客户端:(你去4S店里买汽车,然后4s店告诉汽车工厂生产什么样的汽车)

package com.app.simple_facrory;

public class CarClient {
    public static void main(String[] args) {
        BuyCar fourS = new BuyCar();
        Car car = fourS.produce("宝马汽车");
        String carName = car.getName();
        System.out.println(carName);
    }
}

说实话,其实我最喜欢的还是奥迪。哈哈哈哈哈哈哈哈哈哈哈

你可能感兴趣的:(设计模式,简单工厂模式,java,面试)