• 设计模式3——工厂模式


    设计模式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(简单工厂胜出)

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

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

  • 相关阅读:
    NLP入门之语音模型原理
    NLP入门之语音模型原理
    NLP入门之语音模型原理
    TCP/IP 协议
    TCP/IP 协议
    TCP/IP 协议
    TCP/IP 协议
    Android -- 官方下拉刷新SwipeRefreshLayout
    Android -- 官方下拉刷新SwipeRefreshLayout
    创业屡战屡败,如何找回激情?
  • 原文地址:https://www.cnblogs.com/ghlz/p/13565066.html
Copyright © 2020-2023  润新知