内容简介:php各种设计模式简单实践思考
前言
我一直觉得什么框架,版本,甚至语言对于一个coder来说真的不算什么,掌握一个特别高大上的一个框架或者是一个新的,少众的语言真的不算什么,因为你可以,我要花时间也可以,大家都是这样的。所以基本的显得额外重要,即是算法和数据结构,再就是好的 设计模式 了,,,听过一句话,是好的数据结构是让计算机更快的工作,而一个好的设计模式则是使开发者工作的更快!
单例模式
单例模式特点
-
$_instance 必须声明为静态的私有变量
-
构造函数和克隆函数必须声明为私有的,这是为了防止外部程序 new 类从而失去单例模式的意义
-
getInstance()方法必须声明为公有的,必须调用此方法以返回唯一实例的一个引用
-
::操作符只能访问静态变量或静态函数
-
PHP的单例模式是相对而言的,因为 PHP 的解释运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。
<?php header("Content-type: text/html; charset=utf-8"); class single{ public static $arr=array('host'=>'XXX','user'=>'XXX','password'=>'XXX'); private static $_instance =null; private function __construct(){} private function __clone(){} static public function getInstance(){ if(self::$_instance== null || isset(self::$_instance)){ self::$_instance= new self; } return self::$_instance; } public function showSomething(){ return self::$arr; } } /////////////////////test/////////////// $a=single::getInstance(); print_r(single::getInstance()->showSomething()); ?>
工厂模式
工厂类就是一个专门用来创建其它对象的类,工厂类在多态性编程实践中是非常重要的。它允许动态替换类,修改配置,会使应用程序更加灵活。掌握工厂模式对Web开发是必不可少的。
特点:
-
工厂模式通常用来返回类似接口的不同的类,工厂的一种常见用法就是创建多态的提供者。
-
通常工厂模式有一个关键的构造,即一般被命名为factory的静态方法。这个静态方法可以接受任意数量的参数,并且必须返回一个对象。
工厂模式又分为:
-
简单工厂模式(Simple Factory)
-
工厂方法模式(Factory Method)
-
抽象工厂模式(Abstract Factory)
简单工厂模式:用来生产同一等级结构中的任意产品。对与增加新的产品,无能为力
工厂模式 :用来生产同一等级结构中的固定产品。(支持增加任意产品)
抽象工厂 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为力;支持增加产品族)
<?php //简单工厂模式 header("Content-type: text/html; charset=utf-8"); class simpale{ public function calculate($num1,$num2,$operator){ try { $result=0; switch ($operator){ case '+': $result= $num1+$num2; break; case '-': $result= $num1-$num2; break; case '*': $result= $num1*$num2; break; case '/': if ($num2==0) { throw new Exception("除数不能为0"); } $result= $num1/$num2; break; } return $result; } catch (Exception $e){ echo "您输入有误:".$e->getMessage(); } } } //工厂方法模式 interface people { function jiehun(); } //定义接口 class man implements people{ public $ring=null; public $car=null; public $house=null; public function getAllthing(){ $this->ring='10000'; $this->car='100000'; $this->house='1000000'; } public function jiehun() { if($this->ring && $this->car && $this->house) echo '我可以结婚了<br>'; else echo '我是臭屌丝,还不能结婚<br>'; } } class women implements people { public $face='ugly'; public function getAllthing(){ $this->face='nice'; } public function jiehun() { if($this->face =='nice') echo '我可以结婚了<br>'; else echo '我是臭屌丝,还不能结婚<br>'; } } interface createpeople { // 注意了,这里是工厂模式本质区别所在,将对象的创建抽象成一个接口。 public function create(); } class FactoryMan implements createpeople{ public function create() { return new man; } } class FactoryWomen implements createpeople { public function create() { return new women; } } class Client { // 简单工厂里的静态方法 public function test() { $Factory = new FactoryMan; $man = $Factory->create(); $man->jiehun(); $Factory = new FactoryWomen; $woman = $Factory->create(); $woman->getAllthing(); $woman->jiehun(); } } /////////////test//////////// $f = new Client; $f->test(); //抽象模式就是在工厂模式下接口中添加相应的不同方法即可 ?>
策略模式(Strategy Pattern)
策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用。
策略模式指的是程序中涉及决策控制的一种模式。策略模式功能非常强大,因为这个设计模式本身的核心思想就是面向对象编程的多形性思想。
策略模式的三个特性:
-
定义抽象角色类(定义好各个实现的共同抽象方法)
-
定义具体策略类(具体实现父类的共同方法)
-
定义环境角色类(私有化申明抽象角色变量,重载构造方法,执行抽象方法)
<?php abstract class baseAgent { //抽象策略类 abstract function PrintPage(); } //用于客户端是IE时调用的类(环境角色) class ieAgent extends baseAgent { function PrintPage() { return 'IE'; } } //用于客户端不是IE时调用的类(环境角色) class otherAgent extends baseAgent { function PrintPage() { return 'not IE'; } } class Browser { //具体策略角色 public function call($object) { return $object->PrintPage (); } } ///////////////test//////////////// $bro = new Browser (); echo $bro->call (new ieAgent );
总结
在当今框架横行的PHP世界,MVC固然是所有PHPer最重要的模式,一旦脱离框架,我不禁思考,我们还能写出绝妙的代码吗?一起努力吧~
参考文献
-
http://www.cnblogs.com/yangjinjin/archive/2013/01/31/2887492.HTML
-
http://www.cnblogs.com/hongfei/archive/2012/07/07/2580776.HTML
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
八年级数学(华东师大版)-解题升级-解题快速反应一本通(新课标)
孙丽敏等编 / 吉林教育出版社 / 2004-6 / 10.0
本书将与知识点、重点、难点和考点有关的典型题做全析全解,是具有解题题典性质的助学读物。但本书又优于解题题典,不仅展示解题过程,更详细地提供了解题思考过程和切入点的选择方法,教方法导引思路的功能更强。 学生要提高解题能力,必须具备两个条件:一是打好基础,二是能够运动所学知识分析问题和解决问题。本书用例题解析解说知识点、重点、难点和考点,同时提供解题思考过程,在打基础中激活能力,在解题实......一起来看看 《八年级数学(华东师大版)-解题升级-解题快速反应一本通(新课标)》 这本书的介绍吧!