設計模式的命名啊什麼的,我基本上已經忘記得差不多了,我就把我現在表述的這個東西叫做按需加載吧。
需求:
1.我希望有一個配置文件讀寫類,不需要修改原本這個配置文件讀寫類就可以實現擴展;
2.這個擴展是比如我原本的配置是txt格式的,但現在我的設定類別是php或xml等,也可能是json
3.呼叫介面統一,不管什麼類型的設定文件,我呼叫同樣的一個檔案設定讀寫類別就可以了,防止後續的程式碼很難維護。
那麼:
1.首先,想到的是定義一個抽象類,不斷的繼承,透過繼承不用修改這個配置文件讀寫類;
2.但是,我就不能統一使用這個配置文件讀取類了,我調用的是我繼承後的這個類;
實現思想:
好了,廢話了那麼多,我這裡就來說一下我的實現思路,其實整個思路還是挺簡單的;
<code>/** * 定义配置文件读写类,所有的配置文件读写调用此类就可以了,统一接口 */ class Config { // 读 public function read($file,$type = 'txt') { $instance = $this->getInstance($type); $instance->read($file); } // 写 public function write($file,$type = 'txt') { $instance = $this->getInstance($type); $instance->read($file); } // 删 public function delete($file,$type = 'txt') { $instance = $this->getInstance($type); $instance->read($file); } // 获取实际操作对象实例 public function getInstance($type = 'txt') { $class_name = ucfirst($type).'Config'; // 根据文件格式实例化具体的操作类 if(class_exists($class_name)) { $instance = new $class_name; } else { throw new Exception('未定义'.$class_name); } if(is_subclass_of($instance,'BaseConfig') !== 1) { throw new Exception('配置文件读写类必须继承BaseConfig'); } return $instance; } } // 定义一个基础操作接口类,后续的文件读写必须继承这个规范 abstract class BaseConfig { abstract protected function read($file) {} abstract protected function write($file) {} abstract protected function delete($file) {} } // Text配置文件读写类 TxtConfig extends BaseConfig { public function read($file) {} public function write($file) {} public function delete($file) {} } // 其他配置文件读写类。。。</code>
以上的程式碼我沒測試過,我表達的只是一個思想,當然,基於這種思想還可以設計出更加靈活,可以增加一個數組配置來定義不同的文件分別採用哪個類來讀寫,時間關係,這個問題後續有時間再更新。
以上就介紹了php按需載入方式來增加程式的彈性度,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。