设计模式

2019-08-19  本文已影响0人  swoft_

单例模式模式
工厂模式模式
策略者模式
适配器模式
观察者模式

单例模式

public class Singleton{
  private static $instance = null;
  private function __construct(){};
  private function __clone(){};
  public static getInstance(){
     if(instance) return self::instance;
     self::instance =  new self();
     return self::instance;
  }
}

php的应用主要在于数据库应用:

  1. 一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时, 如果使用单例模式, 则可以避免大量的new 操作消耗的资源,还可以减少数据库连接这样就不容易出现 too many connections情况。
  2. 如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看zend Framework的FrontController部分。

工厂模式

使用工厂模式的好处是,如果你想要更改所实例化的类名等,则只需更改该工厂方法内容即可,不需逐一寻找代码中具体实例化的地方(new处)修改了。为系统结构提供灵活的动态扩展机制,减少了耦合。

instance people{function say();}
class man implements people{function say()}
class woman  implements people {function say()}

class Factory{
 static function createMan(){ return new man();}
 static function createWoMan(){ return new woman();}
}

策略者模式

策略模式非常适合复杂数据管理系统或数据处理系统,二者在数据筛选、搜索或处理的方式方面需要较高的灵活性

interface G{
 function com();
}
class A{
  public function com(){}
}
class B{
  public function com(){}
}

class test{
 function index($g){
   $g->com();
  }
}
$t = new test();
$t->index(new A());

观察者模式

  1. 观察者模式(Observer),当一个对象状态发生变化时,依赖它的对象全部会收到通知,并自动更新。
  2. 场景:一个事件发生后,要执行一连串更新操作。传统的编程方式,就是在事件的代码之后直接加入处理的逻辑。当更新的逻辑增多之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑需要修改事件的主体代码。
  3. 观察者模式实现了低耦合,非侵入式的通知与更新机制。

定义一个事件触发抽象类。

abstract class EventGenerator{
    private $observers = array();
        function addObserver(Observer $observer){
        $this->observers[]=$observer;
    }
    function notify(){
        foreach ($this->observers as $observer){
            $observer->update();
        }
    }
}

 
interface Observer{
    function update();//这里就是在事件发生后要执行的逻辑
}
//一个实现了EventGenerator抽象类的类,用于具体定义某个发生的事件


class Event extends EventGenerator{
    function triger(){
        echo "Event<br>";
    }
}
class Observer1 implements Observer{
    function update(){
        echo "逻辑1<br>";
    }
}
class Observer2 implements Observer{
    function update(){
        echo "逻辑2<br>";
    }
}
$event = new Event();
$event->addObserver(new Observer1());
$event->addObserver(new Observer2());
$event->triger();
$event->notify();

上一篇 下一篇

猜你喜欢

热点阅读