zoukankan      html  css  js  c++  java
  • PHP设计模式

    本文按如下顺序编写:①注册模式 ②适配器模式 ③观察者模式 ④原型模式

    1、注册模式。为实现对象全局共享,将对象保存到数组,这就是注册到注册树。需要时从注册树取出来

    class Register{
          protected static $objects;
          public function set($alias,$object){
                 self::objects[$alias] = $object; //将对象注册到树上
          }
          public function get($name){
                 return self::objects[$name];    //从注册树上取出对象
          }
        public function __unset($alias){
            unset(self::$object[$alias]); //移除对象树上的某个对象
        } }

    2、适配器模式。新的接口要实现,旧的接口不能动,这种情况下引入一个新类即适配器,对接新的接口,实现高内聚低耦合。

    interface Target{
    public function method1();
    public function method2();
    }

    //原来的接口
    class Old{
    public function method1(){
    echo 'this is old method1'.'<br>';
    }
    }

    //适配器。对接原来的接口,实现新的接口method2
    class Adater implements Target{
    private $adapter;
    public function __construct(Old $old){
    $this->adapter = $old;
    }
    public function method1(){
    $this->adapter->method1();
    }
    public function method2()
    {
    echo 'this is new method2';
    }
    }
    $old = new Old();
    $adapter = new Adater($old);
    $adapter->method1();
    $adapter->method2();

    输出结果:
    this is old method1
    this is new method2


     

    3、观察者模式。观察者向主题注册,主题再通知观察者操作。

    //主题接口
    interface Subject{ public function register(Observer $observer); public function notify(); } //观察者接口 interface Observer{ public function watch(); } //主题实现 class Action implements Subject{ public $_observer = Array(); public function register(Observer $observer){ //将观察者添加到注册树 $this->_observer[] = $observer; } public function notify(){ foreach ($this->_observer as $observer) { //遍历观察者通知 $observer->watch(); } } }
    //观察者实现 class Cat implements Observer{ public function watch(){ echo 'here is a cat'.'<br>'; } } class Dog implements Observer{ public function watch(){ echo 'here is a dog'.'<br>'; } } $action = new Action(); $action->register(new Cat); $action->register(new Dog); $action->notify();

    输出:
    here is a cat
    here is a dog

    明天要加个小鸡腿,这么晚了还学习了!

    4、原型模式。与工厂模式类似,都是用来创建对象的。但是原型模式是用的克隆生成大对象,减少创建时的初始化等操作占用开销

    interface Prototype{   
      function copy();  
    }
    
    class Student implements Prototype{
      public $name;
      public function __construct($name){
        $this->name = $name
       }
      public function copy(){
        return clone $this;
      }
      public function printInfo(){
        echo $this->name.'<br>';
      }
    }
    
    $stu1 = new Student('张三');
    $stu1->printInfo();
    $stu2 = $stu1->copy();
    $stu2->name = '李四';
    $stu2->printInfo();
    输出结果:
          张三
          李四
  • 相关阅读:
    python进阶之装饰器之3利用装饰器强制函数上的类型检查
    python进阶之装饰器之6.装饰器为被包装函数增加参数,如何实现装饰器对类进行打补丁或者说对类的功能进行扩充
    python进阶之装饰器之5把装饰器作用到类和静态方法上
    python进阶之装饰器之4在类中定义装饰器,将装饰器定义为类,两者的区别与联系
    AOP的使用
    使用Maven搭建SSM框架
    js判断字符串是否有重复
    纯js实现复制功能
    关于Log文本的操作
    jquery往textarea鼠标光标选中的地方插入值
  • 原文地址:https://www.cnblogs.com/lisongwei/p/10977203.html
Copyright © 2011-2022 走看看