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

    • 单例模式
    <?php
    class mysingle
    {
        private static $myinstance =null;
        private function __construct()
        {
        }
        private function  __clone()
        {
    
        }
        public static function createobject()
        {
            if (self::$myinstance==null)
            {
                self::$myinstance = new self();
            }
            return self::$myinstance;
        }
    }
    $thesingle = mysingle::createobject();
    $anothersingle = mysingle::createobject();
    echo ($thesingle===$anothersingle);
    ?>

    输出结果:

    1

    说明两个对象完全一致

    • 观察者模式

    被观察者(dingdaguo)做出某种行为(drink_cola())时,触发监控者(coach)的做出一些反应(persuade)

    <?php
    class dingdaguo
    {
         protected $observers = [];
         public function addobserver($myobserver)
         {
            $this->observers[] = $myobserver;
         }
         public function drink_cola()
         {
            foreach($this->observers as $observer)
            {
                $observer->persuade();
            }
         }
         public function delobsrver($observer)
         {
             $index = array_search($observer,$this->observers,);
             $this->observers=array_slice($this->observers,0,$index);
         }
    }
    
    class coach
    {
        public function __construct($name)
        {
            $this->name = $name;
        }
    
        public function persuade()
        {
            echo $this->name."说:别喝可乐了,都是甜的东西".PHP_EOL;
        }
    }
    $cpc = new coach("陈培昌");
    $cj = new coach("程劲");
    $dy = new dingdaguo();
    $dy->addobserver($cpc);
    $dy->addobserver($cj);
    $dy->drink_cola();
    echo "删除其中一个对象".PHP_EOL;
    $dy->delobsrver($cj);
    $dy
    ->drink_cola();

    输出结果:

    陈培昌说:别喝可乐了,都是甜的东西
    程劲说:别喝可乐了,都是甜的东西
    删除其中一个对象
    陈培昌说:别喝可乐了,都是甜的东西

    • 适配器

    实现接口的过程中,所有类都按照一种方式实现接口

    <?php
    interface martial_trainning
    {
        public function welcomeword();
        public function braziljudo();
        public function muaythai();
    }
    class xxd
    {
        public function welcomeword()
        {
            echo "欢迎来到必图训练".PHP_EOL;
        }
    }
    class cj
    {
        public function braziljudo()
        {
            echo "我是小烤肠,来跟我一起学巴西柔术吧".PHP_EOL;
        }
    }
    
    class cpc implements martial_trainning
    {
        protected $myxxd = null;
        protected $mycj = null;
        public function __construct($xxd,$cj)
        {
            $this->myxxd = $xxd;
            $this->mycj = $cj;
        }
        public function welcomeword()
        {
            // TODO: Implement welcomeword() method.
            $this->myxxd->welcomeword();
        }
        public function braziljudo()
        {
            // TODO: Implement braziljudo() method.
            $this->mycj->braziljudo();
        }
        public function muaythai()
        {
            echo "我是小松鼠,跟我一起练习泰拳吧".PHP_EOL;
        }
    }
    
    $cj = new cj();
    $xxd = new xxd();
    $cpc = new cpc($xxd,$cj);
    $cpc->braziljudo();
    $cpc->welcomeword();
    $cpc->muaythai();
    ?>

    输出结果:

    我是小烤肠,来跟我一起学巴西柔术吧
    欢迎来到必图训练
    我是小松鼠,跟我一起练习泰拳吧

    • 策略模式

    通过可以预测的参数传入,来决定调用哪个类的实现

    <?php
    interface martial_trainning
    {
        public function hoaring();
    }
    class xxd implements martial_trainning
    {
        public function hoaring()
        {
            echo "诶斯~诶斯~".PHP_EOL;
        }
    }
    class cj implements martial_trainning
    {
        public function hoaring()
        {
            echo "诶~嘿嘿".PHP_EOL;
        }
    }
    class cpc implements martial_trainning
    {
        public function hoaring()
        {
           echo "嗷儿喂~嗷儿喂~";
        }
    }
    class mycoach
    {
        protected $myobject = null;
        public function  __construct($whichobject)
        {
            $this->myobject = $whichobject;
        }
        public function hoaring()
        {
            $this->myobject->hoaring();
        }
    }
    $cpc = new cpc();
    $mycoach = new mycoach($cpc);
    $mycoach->hoaring();
    echo PHP_EOL."===========换了一个类=============".PHP_EOL;
    $cj = new cj();
    $mycoach = new mycoach($cj);
    $mycoach->hoaring();
    ?>

    输出结果:

    嗷儿喂~嗷儿喂~
    ===========换了一个类=============
    诶~嘿嘿

  • 相关阅读:
    观后感
    用户故事排球教练助手
    本周工作量
    本周个人作业
    个人工作量
    个人作业
    产品计划总结
    典型用户和场景总结
    排球比赛计分规则
    PowerShell ISE:Windows Server 2008 R2默认不安装
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/11002330.html
Copyright © 2011-2022 走看看