内容简介: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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Responsive Web Design
Ethan Marcotte / Happy Cog / 2011-6 / USD 18.00
From mobile browsers to netbooks and tablets, users are visiting your sites from an increasing array of devices and browsers. Are your designs ready? Learn how to think beyond the desktop and craft be......一起来看看 《Responsive Web Design》 这本书的介绍吧!