zoukankan      html  css  js  c++  java
  • PHP工厂方法模式

    此模式中,通过定义一个抽象的核心工厂类,并定义创建产品对象的接口,创建具体产品实例的工作延迟到其工厂子类去完成。这样做的好处是核心类只关注工厂类的接口定义,而具体的产品实例交给具体的工厂子类去创建。当系统需要新增一个产品,无需修改现有系统代码,只需要添加一个具体产品类和其对应的工厂子类,是系统的扩展性变得很好,符合面向对象编程的开闭原则。

    <?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();
    

      工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了面向对象的多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。

    僵尸将臣
  • 相关阅读:
    哥哥牟:诺拉的死亡是由于寻找食物的粪便!
    Eclipse建筑物SSH(struts-2.2.3 + spring-2.5.6 + hibernate-3.6.8)相框-随着源代码
    Centos6.5下一个Ceph存储集群结构
    linux input如何固定设备event handler
    sizeof运营商
    【小言的设计模式】类之间的关系
    2015第11周五
    2015第11周四~代发公司招聘信息
    2015第11周三
    2015第11周二
  • 原文地址:https://www.cnblogs.com/sunshenggang/p/7866085.html
Copyright © 2011-2022 走看看