设计模式3——工厂模式

简单工厂模式


package com.ghl.factory.simple;

/**
 * @ProjectName DesignPattern
 * @ClassName Car
 * @Date 2020/8/26 13:12
 * @Author gaohengli
 * @Version 1.0
 */
//简单工厂模式
public interface Car {
    void name();
}

package com.ghl.factory.simple;

/**
 * @ProjectName DesignPattern
 * @ClassName WuLin
 * @Date 2020/8/26 13:14
 * @Author gaohengli
 * @Version 1.0
 */
public class WuLin implements Car {
    @Override
    public void name() {
        System.out.println("五菱宏光");
    }
}

package com.ghl.factory.simple;

/**
 * @ProjectName DesignPattern
 * @ClassName Tesla
 * @Date 2020/8/26 13:15
 * @Author gaohengli
 * @Version 1.0
 */
public class Tesla implements Car {
    @Override
    public void name() {
        System.out.println("特斯拉");
    }
}

package com.ghl.factory.simple;

/**
 * @ProjectName DesignPattern
 * @ClassName CarFactory
 * @Date 2020/8/26 13:43
 * @Author gaohengli
 * @Version 1.0
 */
//车工厂
    //简单工厂模式,静态工厂模式
    //没有满足开闭原则,增加新产品时需要改代码
public class CarFactory {

    public static Car getCar(String carName){
        if (carName.equals("五菱")){
            return new WuLin();
        }else if (carName.equals("特斯拉")){
            return new Tesla();
        }else {
            return null;
        }
    }
}

package com.ghl.factory.simple;

/**
 * @ProjectName DesignPattern
 * @ClassName Consumer
 * @Date 2020/8/26 13:21
 * @Author gaohengli
 * @Version 1.0
 */
//消费者买车
public class Consumer {
    public static void main(String[] args) {
        //接口,所有实现类,工厂
        /*Car wuLin = new WuLin();
        Car tesla = new Tesla();*/

        //使用工厂(不用关注造车等内部细节)
        Car wuLin = CarFactory.getCar("五菱");
        Car tesla = CarFactory.getCar("特斯拉");

        wuLin.name();
        tesla.name();
    }
}

工厂方法模式:


package com.ghl.factory.method;

/**
 * @ProjectName DesignPattern
 * @ClassName Car
 * @Date 2020/8/26 13:12
 * @Author gaohengli
 * @Version 1.0
 */
//工厂方法模式
public interface Car {
    void name();
}

package com.ghl.factory.method;

/**
 * @ProjectName DesignPattern
 * @ClassName WuLin
 * @Date 2020/8/26 13:14
 * @Author gaohengli
 * @Version 1.0
 */
public class WuLin implements Car {
    @Override
    public void name() {
        System.out.println("五菱宏光");
    }
}

package com.ghl.factory.method;

/**
 * @ProjectName DesignPattern
 * @ClassName Tesla
 * @Date 2020/8/26 13:15
 * @Author gaohengli
 * @Version 1.0
 */
public class Tesla implements Car {
    @Override
    public void name() {
        System.out.println("特斯拉");
    }
}

package com.ghl.factory.method;

/**
 * @ProjectName DesignPattern
 * @ClassName CarFactory
 * @Date 2020/8/26 14:08
 * @Author gaohengli
 * @Version 1.0
 */
//工厂方法模式
public interface CarFactory {
    Car getCar();
}

package com.ghl.factory.method;

/**
 * @ProjectName DesignPattern
 * @ClassName TeslaFactory
 * @Date 2020/8/26 14:09
 * @Author gaohengli
 * @Version 1.0
 */
//特斯拉工厂
public class TeslaFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new Tesla();
    }
}

package com.ghl.factory.method;

/**
 * @ProjectName DesignPattern
 * @ClassName WulinFactory
 * @Date 2020/8/26 14:10
 * @Author gaohengli
 * @Version 1.0
 */
//五菱工厂
public class WulinFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new WuLin();
    }
}

package com.ghl.factory.method;

import com.ghl.factory.simple.CarFactory;

/**
 * @ProjectName DesignPattern
 * @ClassName Consumer
 * @Date 2020/8/26 13:21
 * @Author gaohengli
 * @Version 1.0
 */
//消费者买车
public class Consumer {
    public static void main(String[] args) {
        Car wuLin = new WulinFactory().getCar();
        Car tesla = new TeslaFactory().getCar();

        wuLin.name();
        tesla.name();

    }
}

总结:

结构复杂度:simple(简单工厂胜出)

代码复杂度:simple(简单工厂胜出)

编程复杂度:simple(简单工厂胜出)

管理上的复杂度:simple(简单工厂胜出)

根据设计原则:推荐工厂方法模式

根据实际业务:推荐简单工厂模式