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

    <?php
    //------------------------------简单接口
    // 共同接口
    interface db 
    {
        function conn();
    }
    
    // 服务端开发不知道将会被谁调用
    class mysql implements  db
    {
        public function conn()
        {
            echo  '连接mysql';
        }
    }
    
    class sqlit implements db
    {
        public function conn()
        {
            echo '连接sqlit';
        }
    }
    
    // 客户端看不到mysql,sqlit内部细节,根据文档只清楚有两个接口
    $db = new mysql;
    $db->conn();  //连接mysql
    
    $db = new sqlit;
    $db->conn(); //连接sqlit
    
    // --------------------------简单工厂
    class Factory
    {
        public static function createDb($type)
        {
            return new $type;
        }
    }
    
    // 客户端调用现在不知道有哪些类名,只知道接口支持mysql,sqlit,
    // 提供了Factory::createDb方法,只要传数据库名称,就可以得到实例
    $db = Factory::createDb('mysql');
    $db->conn(); // 连接mysql
    
    /**
     * 新增oracle数据库?
     * 在c++和java中修改代码要增加编译的成本,不符合增开增开修闭原则
     */
    
     //----------------------------- 接口工厂
    
     interface dbFactory 
     {
         public function createDb();
     }
    
     class mysqlFactory implements dbFactory
     {
         public function createDb()
         {
             return new mysql();
         }
     }
    
     class sqlitFactory implements dbFactory
     {
        public function createDb()
        {
            return new sqlit();
        }
     }
    
     // 客户端开始调用包
     $mysqlFactory = new mysqlFactory();
     $mysql = $mysqlFactory->createDb();  
     $mysql->conn();
    
     $sqlitFactory = new sqlitFactory();
     $sqlit = $sqlitFactory->createDb();
     $sqlit->conn();
    
     // 新增oracle只要新增oracle工产,和oracle数据库类,避免对原有代码的修改
     class oracle implements db
     {
        public function conn()
        {
            echo '连接oracle';
        }
     }
    
     class oracleFactory implements dbFactory
     {
         public function createDb()
         {
             return new oracle;
         }
     }
    
     $oracleFactory = new oracleFactory();
     $oracle = $oracleFactory->createDb();
     $oracle->conn();
    

      

  • 相关阅读:
    影响上传、下载速度的原因
    JDK9环境变量配置
    CentOS配置Nginx及常见命令
    Docker基本命令
    selenium+java文件上传
    selenium java清空默认值时失效方法
    js常用 方法 封装
    Jvm的gc机制和算法
    Java正则总结
    枚举类
  • 原文地址:https://www.cnblogs.com/xiangdongsheng/p/13340104.html
Copyright © 2011-2022 走看看