我一直觉得什么框架,版本,甚至语言对于一个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设计模式之组合模式与案例分享
常见的php设计模式分享
php中常用的设计模式介绍及实例用法
以上就是php各种设计模式的简单实践实例的详细内容。