zoukankan      html  css  js  c++  java
  • php设计模式----工厂模式

    工厂模式主要是为了代码执行的时候更灵活地new对象,就像工厂流水线一样,批量生产出产品。

    目的:简化对象生成过程,更加灵活。

    例子如下:

    <?php
    /**
     * User: freephp
     * Date: 2015/9/23
     * Time: 16:58
     */
    
    interface Medias {
        function show();  // 展现效果的功能
        function notify(); //有更新通知功能
    }
    
    
    class Picture implements Medias{
        public function show() {
            echo "我是图片服务,高清无码!
    ";
        }
        public function notify() {
            echo "新的一波美图来了,请查看!
    ";
        }
    }
    
    class Video implements Medias{
        public function show() {
            echo "我是视频服务,高清流畅,不卡顿!
    ";
        }
        public function notify() {
            echo "新的一波视频来了,请查看!
    ";
        }
    }
    
    class Sound implements Medias{
        public function show() {
            echo "我是音频服务,无损音质!
    ";
        }
        public function notify() {
            echo "新的一波音频来了,请查看!
    ";
        }
    }
    
    /**
    * 工厂类,负责对象生产
    */
    class Factory {
        private static function getValidSource() {
            return array(
                "Picture",
                "Video",
                "Sound"
            );
        }
        public static function create($sourceName) {
            if(in_array($sourceName, self::getValidSource())) {
                return new $sourceName();
    
            } else {
                echo "暂不支持这种服务!
    ";die();
            }
        }
    }
    
    // -------------客户端--------
    $soundSer = Factory::create('Sound');
    $soundSer->notify();
    
    $soundSer->show();
    
    $Ser = Factory::create('Picture');
    $Ser->notify();
    $Ser->show();

    输出结果如下:

    新的一波音频来了,请查看!
    我是音频服务,无损音质!
    新的一波美图来了,请查看!
    我是图片服务,高清无码!

    代码中定义了一个接口Medias,清晰指出了要实现的通用功能。而Factory类中配置了合法的对象类数组,防止了非法服务对象的创建。(特殊服务要不得!)利用php的灵活特性,动态生成不同服务对象,又基于接口编程,实现了同一接口,不同服务的体现。

    一般来说,如果Picture类和其他服务类在不同的文件中,则需要在Factory的create中require进来,文件名命名按照一定规律,然后截取获得对应文件,再new出对应对象。
  • 相关阅读:
    javascript 基本数据类型
    数据库管理小工具帮助
    CSS3实现32种基本图形
    面试题2:替换空格
    面试题1:二维数组中查找
    图的深度优先和广度优先搜索算法
    Spring+Maven+Dubbo+MyBatis+Linner+Handlebars—Web开发环境搭建
    Spring学习笔记—最小化Spring XML配置
    Spring学习笔记—装配Bean
    Spring学习笔记—Spring之旅
  • 原文地址:https://www.cnblogs.com/freephp/p/4832882.html
Copyright © 2011-2022 走看看