设计模式:设计模式

一、单例模式

  单例模式(Singleton Pattern)是一个比较简单的模式,其定义如下:Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)

单例模式通用类图

 

<?php
    class Singleton {
         private static $initial = null;
        
         //私有化构造方法
         private function __construct(){
         }
         //私有化克隆方法
         private function __clone(){
         }
         
         public static function  Initialization(){
                if(self::$initial == null){
                    self::$initial = new self();
                }
                return  self::$initial; 
         }
    }

  优点:

    1. 由于单例模式在内存中只有一个实例,减少了内存开支,在一个对象需要频繁地创建、销毁时,而且创建或销毁时性能又无法优化,单例模式的优势就非常明显

    2. 单例模式可以避免对资源的多重占用

    3. 单例模式可以在系统设置全局的访问点,优化和共享资源访问

  缺点:

    1. 单例模式一般没有接口,扩展困难

    2. 单例模式与单一职责原则有冲突。一个类应该只实现一个逻辑,而不关心它是否是单例的,是不是要单例取决于环境,单例模式把“要单例”和业务逻辑融合在一个类中

二、工厂方法模式

  工厂方法模式。定义为:Define an interface for creating an object,but let subclasses decide which class toinstantiate.Factory Method lets a class defer instantiation to subclasses.(定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。)

工厂模式通用类图

 

<?php
   interface  zoon {
           function introduce();
   }

   class dog implements zoon{
           function introduce(){
            echo "我是小狗,我汪汪汪叫" . PHP_EOL;
        }
   }

   class pig implements zoon{
           function introduce(){
            echo "我是小猪,我哼哼哼叫" . PHP_EOL;
        }
   }

   class sheep implements zoon{
           function introduce(){
            echo "我是小羊,我咩咩咩叫" . PHP_EOL;
        }
   }
  
   interface createZoon{
           function create();
   }
   
   class FactoryDod implements createZoon{
       function create(){
               return new dog();
       }
           
   }

   class FactoryPig implements createZoon{
            function create(){
               return new pig();
       }
   }


   class FactorySheep implements createZoon{
            function create(){
               return new sheep();
       }
   }


  class Factory{
          function __construct(){
            $d = new FactoryDod();
            $d->create()->introduce();
      
            $p = new FactoryPig();
            $d->create()->introduce();
      
            $s = new Factorysheep();
            $s->create()->introduce();
        }
  }

  $t = new Factory();
  

 

猜你喜欢

转载自www.cnblogs.com/onlycat/p/8980491.html