本文主要和大家分享16个PHP设计模式介绍,文中涉及一些 UML 类图,为了更好地理解,可以先阅读 UML 类图。希望能帮助到大家。
一、工厂模式
工厂模式具体可分为三类模式:简单工厂模式,工厂方法模式,抽象工厂模式;
1.简单工厂模式
又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
角色:
Factory类:负责创建具体产品的实例Product类:抽象产品类,定义产品子类的公共接口ConcreteProduct 类:具体产品类,实现Product父类的接口功能,也可添加自定义的功能
UML类图:
示例代码:
<?php //简单工厂模式class Cat{ function __construct() { echo "I am Cat class <br>"; }}class Dog{ function __construct() { echo "I am Dog class <br>"; }}class Factory{ public static function CreateAnimal($name){ if ($name == 'cat') { return new Cat(); } elseif ($name == 'dog') { return new Dog(); } }}$cat = Factory::CreateAnimal('cat');$dog = Factory::CreateAnimal('dog');
简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。
2.工厂方法模式
此模式中,通过定义一个抽象的核心工厂类,并定义创建产品对象的接口,创建具体产品实例的工作延迟到其工厂子类去完成。这样做的好处是核心类只关注工厂类的接口定义,而具体的产品实例交给具体的工厂子类去创建。当系统需要新增一个产品是,无需修改现有系统代码,只需要添加一个具体产品类和其对应的工厂子类,是系统的扩展性变得很好,符合面向对象编程的开闭原则;
角色:
Product:抽象产品类ConcreteProduct:具体产品类Factory:抽象工厂类ConcreteFactory:具体工厂类
UML类图:
这里写图片描述
示例代码:
<?php interface Animal{ public function run(); public function say();}class Cat implements Animal{ public function run(){ echo "I ran slowly <br>"; } public function say(){ echo "I am Cat class <br>"; }}class Dog implements Animal{ public function run(){ echo "I'm running fast <br>"; } public function say(){ echo "I am Dog class <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->say();$cat->run();$dog = DogFactory::createAnimal();$dog->say();$dog->run();
工厂方法模式是简单工厂模式2本文来源gaodaima#com搞(代@码$网6
搞gaodaima代码
的进一步抽象和推广。由于使用了面向对象的多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。
3.抽象工厂模式