PHP设计模式

单例模式(单元素模式)

为什么要使用PHP单例模式?

工厂模式

为什么要使用工厂模式?
什么情况下使用工厂模式?
使用工厂模式可以解决什么问题?

工厂模式用来帮助程序员管理要创建的对象的相关信息。有时对象构造方法的参数有很多,有时这些参数必须用默认的信息填充。这些对象应该在工厂内创建,把它们的生成和初始化信息放在同一个地方。

When:当你发现你需要搜集很多信息来创建对象时使用工厂模式
Why:工厂帮助我们把对象创建的逻辑放在同一个地方。同样也可以打破依赖,促进松散耦合和依赖注入,让测试更方便。

Factory1.php

<?php
/**
 * IUser 接口定义用户对象应执行什么操作
 */
interface IUser
{
  function getName();
}
/**
 * IUser 的实现称为 User
 */
class User implements IUser
{
  public function __construct( $id ) { }

  public function getName()
  {
    return "Jack";
  }
}
/**
 * UserFactory 工厂类则创建 IUser 对象
 */
class UserFactory
{
  public static function Create( $id )
  {
    return new User( $id );
  }
}

$uo = UserFactory::Create( 1 );var_dump($uo);
echo( $uo->getName()."\n" );

Factory2.php

<?php
interface IUser
{
  function getName();
}

class User implements IUser
{
  public static function Load( $id ) 
  {
        return new User( $id );
  }

  public static function Create( ) 
  {
        return new User( null );
  }

  public function __construct( $id ) { }

  public function getName()
  {
    return "Jack";
  }
}

$uo = User::Load( 1 );
echo( $uo->getName()."\n" );

代理模式

有时你不能(不想)把持久层的信息暴露给你的业务类。代理模式(proxy pattern)是一个很好的方式:欺骗你的业务类,让它们认为是在使用已经存在的对象。

When:当你不得不从持久层或外部源检索信息,但是又不想让业务逻辑知道这些
Why:提供了一个非入侵式的方式在幕后创建对象。它同样使得动态的、方便的从不同源检索数据成为可能。
一个代理(proxy)有效实现了一个接口像真正的对象那样,有同样的功能。业务逻辑简单的把它当作真正的对象使用,但实际上,如果对象不存在代理将创建一个。

策略模式

When:灵活性和重用性比起代码的简明更重要
Why:用它来实现大型的、可交换的复杂逻辑块,同时保持相同的逻辑特征
比如你创建了一个通用的Calculator,然后使用不同的ComputationStrategy来执行这个计算。这是一个被适度使用的模式,当你不得不定义很多条件行为时,它非常有用。

观察者模式

订阅一名观察者
观察者模式提供了一个简单的方法来监视对象,在条件发生变化时采取行动。这里有两种类型的观察者实现:

轮询:对象接收观察者。订阅者观察这个对象,特定事件发生时被通知。订阅者询问被观察者更多的信息以便采取行动。
推送:像轮询一样,对象接收观察者,当特定事件发生时观察者被通知。当一个通知发生时,观察者收到一个暗示:可以行动了。
背景:

When:在你的业务逻辑中提供一个通知系统。
Why:这个模式提供了一种方式,可以在多个对象间进行事件通信。
这个模式的案例:邮件通知、后台程序日志或信息系统。当然在现实中,有无数的途径来使用它。

适配器模式

适配器模式在业务逻辑和其它事物间建立了一个通信。我们已经见过这类模式了:网关模式。

When:你需要与已存在的、有潜在变化的模块、库、API建立连接
Why:让你的业务逻辑只是依赖适配器提供的公共方法。
如果上面的模式都不适用与你的情况,你可以使用…

参考链接:
五种常见的 PHP 设计模式
什么时候使用PHP设计模式和为什么要使用?
设计模式(一)工厂模式Factory(创建型)

PHP设计模式,好文章,Design Patterns

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值