前言

我一直觉得什么框架,版本,甚至语言对于一个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#中执行带有GO的批量sql语句

    引用 思海网络  在用C#中调用ADO执行批量SQL语句的时候,会出现无法识别GO语句的错误.这个时候,我们以GO语句为分割点,把整个批量语句分割成N块独立的SQL语句代码块(不包含GO语句),然后再 ...

  2. jQuery数据缓存$.data 的使用以及源码解析

    一.实现原理: 对于DOM元素,通过分配一个唯一的关联id把DOM元素和该DOM元素的数据缓存对象关联起来,关联id被附加到以jQuery.expando的值命名的属性上,数据存储在全局缓存对象jQu ...

  3. 转动的八卦图纯css实现

      这类的东西网上一搜就是大把的,看着比较空旷的博客,所以自己也来写一个. <!DOCTYPE html> <html> <head> <meta chars ...

  4. vue click事件获取当前元素属性

    Vue可以传递$event对象 <body id="app"> <ul> <li @click="say('hello!', $event) ...

  5. CSS3及JS简单实现选项卡效果(适配手机端和pc端)

    想要适配手机端和pc端,有几种简单的方法,本人使用的是百分比分配的方法. *{ padding: 0; margin: 0; } body,html{ width: 100%; height: 100 ...

  6. 003客户端负载均衡Ribbon & 短路器Hystrix

    1.POM配置 和普通Spring Boot工程相比,仅仅添加了Eureka.Ribbon.Hystrix依赖和Spring Cloud依赖管理 <dependencies> <!- ...

  7. C++类继承--构造函数时先构造基类

    以下说明继承类函数构造时,先构造基类: 析构基类时,若没加上virtual,只析构基类,不析构派生类: 析构派生类时,同时会析构基类: 1. 基类析构函数有virtual #include <s ...

  8. java断言 assert

    关于assert的用法网上教程很多,这里就不说了,只演示一下运行时开启断言的方法. public class A{ public static void main(String[] args){ Cl ...

  9. SQL Server ->> 校检函数CHECKSUM、CHECKSUM_AGG、BINARY_CHECKSUM和HASHBYTES

    今天特地查了一下SQL Server下的校检函数有哪些.原本我只是在工作中用过一个CHECKSUM,今天特地学习了一下才发现原来还有其他的校检函数. 这里找到了别人对于SQL SERVER下这几个校检 ...

  10. 前后端分离, 前端如何防止直接输入URL进入页面?

    转自:https://blog.csdn.net/weixin_41829196/article/details/80444870 前后端分离,如何防止用户直接在地址栏输入url进入页面,也就是判断用 ...