前言我一直觉得什么框架,版本,甚至语言对于一个coder来说真的不算什么,掌握一个特别高大上的一个框架或者是一个新的,少众的语言真的不算什么,因为你可以,我要花时间也可以,大家都是这样的。所以基本的显得额外重要,即是算法和数据结构,再就是好的设计模式了,,,听过一句话,是好的数据结构是让计算机更快的工作,而一个好的设计模式则是使开发者工作的更快!
单例模式单例模式特点$_instance 必须声明为静态的私有变量
构造函数和克隆函数必须声明为私有的,这是为了防止外部程序 new 类从而失去单例模式的意义
getInstance()方法必须声明为公有的,必须调用此方法以返回唯一实例的一个引用
::操作符只能访问静态变量或静态函数
PHP的单例模式是相对而言的,因为PHP的解释运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。<?phpheader ("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 '我可以结婚了
'; else
echo '我是臭屌丝,还不能结婚
';
}
} class women implements people { public $face='ugly'; public function getAllthing(){ $this->face='nice';
} public function jiehun() { if($this->face =='nice') echo '我可以结婚了
'; else
echo '我是臭屌丝,还不能结婚
';
}
} 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)策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用。
策略模式指的是程序中涉及决策控制的一种模式。策略模式功能非常强大,因为这个设计模式本身的核心思想就是面向对象编程的多形性思想。
策略模式的三个特性:定义抽象角色类(定义好各个实现的共同抽象方法)
定义具体策略类(具体实现父类的共同方法)
定义环境角色类(私有化申明抽象角色变量,重载构造方法,执行抽象方法)<?phpabstract 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最重要的模式,一旦脱离框架,我不禁思考,我们还能写出绝妙的代码吗?一起努力吧~
参考文献
作者:michaelgbw
链接:https://www.jianshu.com/p/89ef4c737ede