zoukankan      html  css  js  c++  java
  • 【PHP设计模式 04_GongChang.php】 工厂方法

    <?php 
    /**
     * 【工厂方法】
     * 之前 03.php 简单工厂,如果再增加一个oracle客户端,就需要再次修改服务端Factory的代码。
     * 在面向对象设计法则中,有一个重要的【开闭原则】———— 对于修改是封闭,对于扩展是开放的
     * 
     */
    
    header("Content-type: text/html; charset=utf-8");
    
    /*共同接口--连接数据库*/
    interface db{
        function conn();
    }
    //工厂接口--创建数据库
    interface Factory{
        function createDB();
    }
    
    /*服务端开发,面向上面的接口。(不知道将会被谁调用)*/
    class dbmysql implements db{
        public function conn(){
            echo '04-连接上了mysql <br>';
        }
    }
    class dbsqlite implements db{
        public function conn(){
            echo '04-连接上了sqlite <br>';
        }
    }
    
    //定义多个工厂类,分别实现上面的工厂接口
    class mysqlFactory implements Factory{
        public function createDB(){
            $db = new dbmysql();
            return $db->conn();
        }
    }
    class sqliteFactory implements Factory{
        public function createDB(){
            $db = new dbsqlite();
            return $db->conn();
        }
    }
    
    /* 客户端开发 */
    $fact = new mysqlFactory(); 
    $fact->createDB();
    
    $fact = new sqliteFactory(); 
    $fact->createDB();
    
    ////==== 假如现在新增 oracle的相关数据(前面的代码不用改):
    class dboracle implements db{
        public function conn(){
            echo '04-连接上了oracle';
        }
    }
    class oracleFactory implements Factory{
        public function createDB(){
            $db = new dboracle();
            return $db->conn();
        }
    }
    //客户端调用
    $fact = new oracleFactory();
    $fact->createDB(); //输出“04-连接上了oracle”
  • 相关阅读:
    CodeForces Round #556 Div.2
    #Leetcode# 650. 2 Keys Keyboard
    #Leetcode# 552. Student Attendance Record II
    #Leetcode# 551. Student Attendance Record I
    #Leetcode# 522. Longest Uncommon Subsequence II
    牛客OI周赛9-普及组
    最长回文子序列 (模板)
    C++ 各种排序算法总结
    THU 数据结构 真二叉树重构(Proper Rebuild)
    C++中结构体函数的实现
  • 原文地址:https://www.cnblogs.com/rxbook/p/6002970.html
Copyright © 2011-2022 走看看