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();
- 单例模式:
最经典的案例就是开发程序的时候,往往要操作很多次数据库,根据数据库句柄链接数据库的行为,使用单例模式可以大大减少 new 的操作。因为每次 new 操作都会消耗大量的系统资源。
<?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;
}
}