zoukankan      html  css  js  c++  java
  • 设计模式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(简单工厂胜出)

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

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

  • 相关阅读:
    20100320 ~ 20100420 小结与本月计划
    datamining的思考
    谈谈网络蜘蛛 爬开心网001的一些体会
    将 ASP.NET MVC3 Razor 项目部署到虚拟主机中
    Eclipse代码中中文字显示很小的解决办法
    U8800一键ROOT删除定制软件 安装新版Docment to go
    Android(安卓) U8800 长按 搜索键、返回键 锁屏或解锁的设置方法
    JDK5.0新特性系列3.枚举类型
    JDK5.0新特性系列1.自动装箱和拆箱
    网游运营基本概念及专业术语
  • 原文地址:https://www.cnblogs.com/ghlz/p/13565066.html
Copyright © 2011-2022 走看看