前言

我一直觉得什么框架,版本,甚至语言对于一个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最重要的模式,一旦脱离框架,我不禁思考,我们还能写出绝妙的代码吗?一起努力吧~

参考文献

php各种设计模式简单实践思考的更多相关文章

  1. Atitit 设计模式的本质思考】

    Atitit 设计模式的本质思考] 1. 世界就是有模式构建的1 1.1. 多次模式与偶然模式1 1.2. 模式就是在一种场合下对某个问题的一个解决方案."1 1.3. 模式需要三样东西.  ...

  2. SQL知识以及SQL语句简单实践

    综述 大家都知道SQL是结构化查询语言,是关系数据库的标准语言,是一个综合的,功能极强的同时又简洁易学的,它集级数据查询(Data Quest),数据操纵(Data Manipulation),数据定 ...

  3. Golang设计模式—简单工厂模式(Simple Factory Pattern)

    Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...

  4. Spring 学习二-----AOP的原理与简单实践

    一.Spring  AOP的原理 AOP全名Aspect-Oriented Programming,中文直译为面向切面(方面)编程.何为切面,就比如说我们系统中的权限管理,日志,事务等我们都可以将其看 ...

  5. TDD的简单实践

    前言 最近有幸跟随资深ThoughtWorks咨询师熊节老师一起学习测试驱动设计,经过短暂的十几天培训,对测试驱动设计的基本原则.实践模式.技巧有了一点点初步的认识. 在此之前,经常自嘲我经历的公司实 ...

  6. Thrift简单实践

    0.什么是RPC RPC(Remote Procedure Call - 远程过程调用),是通过网络从远程计算机上请求服务,而不需要了解底层网路技术的细节.简单点说,就是像调用本地服务(方法)一样调用 ...

  7. Java 异步处理简单实践

    Java 异步处理简单实践 http://www.cnblogs.com/fangfan/p/4047932.html 同步与异步 通常同步意味着一个任务的某个处理过程会对多个线程在用串行化处理,而异 ...

  8. 3. 星际争霸之php设计模式--简单工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  9. Android 设计随便说说之简单实践(合理组合)

    上一篇(Android 设计随便说说之简单实践(模块划分))例举了应用商店设计来说明怎么做模块划分.模块划分主要依赖于第一是业务需求,具体是怎么样的业务.应用商店则包括两个业务,就是向用户展示appl ...

随机推荐

  1. C#语言-04.OOP基础

    a. OOP:面对对象思想 i. 类:是一种功能强大的数据类型,而且是面向对象的基础 . 语法:访问修饰符 class 类名{ //类的主体 } . 成员变量:不以“函数”形式体现 a. 常量:代表与 ...

  2. CXF - 拦截器获取调用方法

    没想到要弄这么一个东西. 起初只是想用interceptor记录一下webservice调用日志,后来却被要求在页面展示. 展示容易,但只是展示webservice的地址无法让用户从中明白什么. 那么 ...

  3. 修改django 后台admin用户的密码

    python manage.py shellfrom django.contrib.auth.models import User from django.contrib.auth.models im ...

  4. BFC(Box Formatting Context)的原理

    BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...

  5. js权威指南学习笔记(四)对象

    1.创建对象 (1).通过对象直接量的方式创建 说明:对象直接量是由若干名/值对组成的映射表,名/值对中间用冒号分隔,名/值对之间用逗号分隔,整个映射表用花括号括起来. 如:       5 5   ...

  6. js和.net后台交互

    1.asp.net呼叫js                        Response.Write("<script language=javascript>"); ...

  7. css3+javascript旋转的3d盒子

    今天写点css3,3d属性写的3d盒子,结合javascript让盒子随鼠标旋转起来 今天带了css3新属性3d <!DOCTYPE html> <html> <head ...

  8. windows 下进程与线程的遍历

    原文:http://www.cnblogs.com/Apersia/p/6579376.html 在Windows下进程与线程的遍历有好几种方法. 进程与线程的遍历可以使用<TlHelp.h&g ...

  9. seo搜索引擎优化

    1.logo 图片换文字 比较好的方法,就是用背景图呈现,标签中写文字,因为文字能被搜索引擎抓取.(background) <h1><a href="##"> ...

  10. 使用spring aop遇到的坑

    1.aop 切点配置无误但只对控制器无效. 检测你的aop开启配置是否放在了spring配置文件中,如果是请把它移到mvc配置文件中. 我们知道当spring项目使用了spring mvc时,项目是存 ...