常用设计模式-工厂模式

1、简单工厂模式

1.1、简单工厂模式缺点:每增加一款汽车都需要修改工厂类。违背开闭原则

1.2、简单工厂模式代码

/**
 * 简单工厂模式
 */
public class CarFactory {

    public Car getCar(String type){
        if(type.equals("benz")){
            return new Benz();
        }else if(type.equals("hummer")){
            return new Hummer();
        }
        return null;
    }

}

2、工厂方法模式

2.1、工厂方法模式特点:职责单一,只负责生产单一产品。

2.2、工厂方法模式优点:避免简单工厂模式的缺点。新增一款汽车只需要新建一家工厂即可。符合开闭原则

2.3、工厂方法模式代码

/*
*工厂接口
 */
public interface CarFactory {
    Car createCar();
}

/**
*宝马工厂生产宝马汽车
 */
public class BMWFactory implements CarFactory {
    @Override
    public Car createCar() {
        return new BMWCar();
    }
}

3、抽象工厂模式

3.1、抽象工厂模式特点:工厂负责生产旗下多个产品(产品族)

3.2、抽象工厂模式代码

 todo

4、工厂方法模式与抽象工厂模式区别

工厂方法模式:该工厂只生产单一产品。

抽象工厂模式:该工厂会生产多个产品(产品族),打比方:一个超级工厂里面分小工厂,工厂1生产轮胎、工厂2生产方向盘、工厂3生产:底盘等等。

4.1、工厂方法模式代码

/**
*汽车接口
 */
public interface Car {
    void driver();
}


/**
*悍马汽车
 */
public class Hummer implements Car {
    @Override
    public void driver() {
        return;
    }
}


/**
* 汽车工厂接口
 * 新增汽车工厂实现此接口即可
 */
public interface CarFactory {
    Car createCar();
}


/**
* 悍马工厂
 */
public class HummerFactory implements CarFactory{
    @Override
    public Car createCar(){
        return new Hummer();
    }
}

 4.2、抽象工厂模式代码

/*
*工厂生产;车胎、方向盘、底盘等汽车配置(一族产品)
* 汽车工厂接口
* 新增汽车工厂实现此接口即可
*/
public interface CarFactory {
    Tyre createTyre();
    Wheel ceateWheel();
    Chassis createChassis();
}


/**
 * 奔驰工厂生产奔驰汽车配件(奔驰一系列产品)
 */
public class BenzFactory implements CarFactory {
    @Override
    public Tyre createTyre() {
        return new BenzTyre();
    }

    @Override
    public Wheel ceateWheel() {
        return new BenzWheel();
    }

    @Override
    public Chassis createChassis() {
        return new BenzChassis();
    }
}

/**
* 悍马工厂生产悍马汽车配件(悍马一系列产品)
 */
public class HummerFactory implements CarFactory{
    @Override
    public Tyre createTyre() {
        return new HummerTyre();
    }

    @Override
    public Wheel ceateWheel() {
        return new HummerWheel();
    }

    @Override
    public Chassis createChassis() {
        return new HummerChassis();
    }
}

 

 5、抽象工厂模式什么情况下会用到?

5.1、抽象工厂模式会使用上:需要生产公司旗下的一系列产品(产品族)。同时其它公司旗下也会生产同样一系列产品。只是两个工厂生产出来品牌不一样。

5.2、抽象工厂模式常见应用:oracle和mysql数据库应用时,系统可以会替换数据库,这时候抽象工厂模式就派上用场了。

原文地址:https://www.cnblogs.com/chenweichu/p/10164605.html