PHP设计模式

2021-02-22  本文已影响0人  answer6

设计模式就是: 典型场景的典型解决方案。就像是象棋中的:当头炮马来跳,这也是象棋中的设计模式。


开闭原则: 规定“软件中的对象,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。


<?php 
interface Animal{
  public function run();
}
class Cat implements Animal
{
  public function run(){
      echo "I ran slowly <br>";
  }
}
class Dog implements Animal
{
  public function run(){
      echo "I'm running fast <br>";
  }
}
abstract class Factory{
  abstract static function createAnimal();
}
class CatFactory extends Factory
{
  public static function createAnimal()
  {
      return new Cat();
  }
}
class DogFactory extends Factory
{
  public static function createAnimal()
  {
      return new Dog();
  }
}

$cat = CatFactory::createAnimal();
$cat->run();

$dog = DogFactory::createAnimal();
$dog->run();

// 如果我们在想拓展兔子类等信息, 就不需要动之前的代码逻辑
class Rabbit implements Animal
{
// 实现动物接口中的run方法
   public function run(){
      echo  'im run very very fast';
   }
}
// 声明兔子工厂类 继承抽象工厂类
class RabbitFactory extends Factory
{
   public  static function createAnimal()
   {
      return new Rabbit();
   }
}
$rabbit = RabbitFactory::createAnimal();
echo $rabbit->run();

<?php
class Mysql
{
    // 私有化成员属性 保存实例
    private static $instance;
    // 私有化构造函数,防止创建对象,也就是防止 new
    private function __construct()
    {
        mysqli_connect($this->db_host,$this->db_user,$this->db_pwd) or die("Could not Connect MySql Server");
    }
    // 私有化克隆方法 防止对象被赋值
    private function __clone()
    {   
    }
    // 开放一个公共方法 来创建对象
    public static function getInstance()
    {
        //判断此成员属性是否是该类的实例。
        if(!(self::$instance instanceof self)){
            self::$instance = new self;
        }
        return self::$instance;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读