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();
    

      

  • 相关阅读:
    No Hibernate Session bound to thread, and configuration does not allow
    谈谈数据库中MyISAM与InnoDB区别
    hibernate实体的几种状态:
    解决Eclipse导出javadoc乱码问题
    freemarker截取字符串
    many-to-one和one-to-many的配置比较
    one-to-many many-to-one配置解释
    extends:类似于java中的继承特征,extends="struts-default"
    eclipse 中创建maven web项目
    java.lang.ClassNotFoundException: javax.persistence.EntityListeners
  • 原文地址:https://www.cnblogs.com/xiangdongsheng/p/13340104.html
Copyright © 2011-2022 走看看