• java设计模式之工厂方法设计模式


    1.定义

    定义一个用于创建对象的接口,让子类决定实例化哪一个类,FactoryMethod使一个类的实例化延迟到其子类.

    2.意识图

     

    3.代码示例

    联想工厂创建联想的电脑,戴尔创建戴尔的电脑

    1)电脑接口

    /**
     * 电脑接口
     * wuyanlin2016@163.com
     *  2017年12月25日
     */
    public interface Computer {
        /**
         * 描述-->一句话简介
         * @param description  描述语
         */
        public void describe(String description);
    }

     

    2).戴尔电脑

    /**
     * Dell电脑
     * wuyanlin2016@163.com
     *  2017年12月25日
     */
    public class DellComputer implements Computer {
    
        @Override
        public void describe(String description) {
            System.out.println(description);
        }
        
    }

     

    3).联想电脑

    /**
     * Lenovo电脑
     * wuyanlin2016@163.com
     *  2017年12月25日
     */
    public class LenovoComputer implements Computer {
    
        @Override
        public void describe(String description) {
            System.out.println(description);
        }
        
    }

     

    4).电脑工厂

    /**
     * 电脑工厂
     * wuyanlin2016@163.com
     *  2017年12月25日
     */
    public class ComputerFactory {
        public static Computer buildComputer(String pcName) {
            if("dell".equalsIgnoreCase(pcName)) return new DellComputer();
            if("lenovo".equalsIgnoreCase(pcName)) return new LenovoComputer();
            return null;
        }
    }

     

    5).电脑操作类

    /**
     * 电脑操作类,调用工厂创建电脑
     * wuyanlin2016@163.com
     *  2017年12月25日
     */
    public class ComputerOperator {
        
        /**
         * 创建电脑
         * @param pcName  电脑名字
         * @param  description  电脑描述
         */
        public void createComputer(String pcName,String description) {
            ComputerFactory.buildComputer(pcName).describe(description);
        }
    }

     

    6).客户端类

    /**
     * 客户端
     * wuyanlin2016@163.com
     *  2017年12月25日
     */
    public class Client {
        public static void main(String[] args) {
            ComputerOperator computerOperation = new ComputerOperator();
            computerOperation.createComputer("lenovo", "我是联想");
            computerOperation.createComputer("dell", "我是戴尔");
        }
    }

     

     

    7).结果

    我是联想
    我是戴尔

     

     

    4.总结

    何时选用?

    1).一个接口多个实现,但是又不知道具体用哪一个实现,由子类去指定

    2).系统设计本身就由子类去指定实现类

     

  • 相关阅读:
    Intellij IDEA 使用总结
    Apache Camel之FTP组件学习
    谈一谈EasyUI中TreeGrid的过滤功能
    JAVA实用案例之图片水印开发
    三、SolrCloud的搭建
    style里面设置变量
    for 循环中 break-continue 与label标签的使用
    vue ref的用法
    Vuex实践
    vue 数据动态响应(Vue.set方法)
  • 原文地址:https://www.cnblogs.com/wuyanlin/p/8111602.html
Copyright © 2020-2023  润新知