zoukankan      html  css  js  c++  java
  • 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).系统设计本身就由子类去指定实现类

     

  • 相关阅读:
    [C和指针]第一部分
    [Effective Java]第十章 并发
    [C程序设计语言]第五部分
    [C程序设计语言]第四部分
    git clone速度太慢解决方案
    Golang使用Redis
    删除校管理员的多余数据
    jQuery ajax同步的替换方法,使用 $.Deferred()对象
    打包并删除临时文件
    通过vjudge刷Uva的题目(解决Uva网站打开慢的问题)
  • 原文地址:https://www.cnblogs.com/wuyanlin/p/8111602.html
Copyright © 2011-2022 走看看