zoukankan      html  css  js  c++  java
  • php精华之独孤九剑

    首先分享一个地址 https://segmentfault.com/a/1190000013696265(这个是主要的分享,人家作者写的非常棒)

    单例模式:对于这个大家当然感觉很简单,so easy,但我们需要知道其原理

    当需要保证对象只有一个实例的时候,单例模式是非常有用的。他把创建对象的控制权交给一个单一的点上,任何时候应用程序都只会存在且仅存在一个实例。单例类不应该能在类的外部进行实例化。
    一个单例类应该具备以下几个因素:

    • 必须拥有一个访问级别为private的构造函数,用于阻止类被随意实例化
    • 必须拥有一个保存类的实例的静态变量
    • 必须拥有一个访问这个实例的公共静态方法,该方法通常被命名为getInstance()
    • 必须拥有一个私有的空的clone方法,防止实例被克隆复制

    class single{

         public static $_instance;

       private function __contruct(){
        }

        public static function getInstance(){

             if(!self::$_instance){

           self::$_instance = new self();

            } 

            return self::$_instance;   

        }

      private function __clone(){}

    }

      工厂模式

       工厂模式解决的是如何不通过new建立实例对象的方法

      工厂模式是一种类,它具有为你创建对象的某些方法,你可以使用工厂类创建对象而不使用new。这样,如果你想要更改所创建的对象类型只需要更改工厂即可,使用该工厂的所有代码会自动更改。

      工厂模式往往配合接口一起使用,这样应用程序就不必要知道这些被实例化的类的具体细节,只要知道工厂返回的是支持某个接口的类就可以方便的使用了。

    
    interface Person
    {
        public function showInfo();
    }
    
    class Student implements Person
    {
        public function showInfo()
        {
            echo "这是一个学生 \n";
        }
    }
    
    
    class Teacher implements Person
    {
        public function showInfo()
        {
            echo "这是一个老师 \n";
        }
    }
    
    
    class PersonFactory
    {
        public static function factory($person_type)
        {
            // 将传入的类型首字母大写
            $class_name = ucfirst($person_type);
    
            if(class_exists($class_name)){
                return new $class_name;
            }else{
                throw  new Exception("类:$class_name 不存在",1);
            }
        }
    }
    
    // 需要一个学生
    $student = PersonFactory::factory('student');
    echo $student->showInfo();
    
    // 需要一个老师的时候
    $teacher = PersonFactory::factory('teacher');
    echo $teacher->showInfo();

     

  • 相关阅读:
    # bootstrap Grid System 柵格系统中“移动优先”的一个小体现[bootstrap ]
    ENGLISH HANDWRITING
    #PHP 类的多继承实现之 traits.md
    #linux vscode 保存总提示“Retry as sudo”
    #【php留存问题-2020年6月19日】,手动为数组添加一个间隔元素,再遍历的时候,提示索引为空
    #Linux 下 Xampp的安装与Hello World
    # 详细了解HTML5中的form表单
    # Promise的简单理解和基本使用
    #简单理解回调函数
    Java中几种常见的设计模式--工厂设计模式
  • 原文地址:https://www.cnblogs.com/gaosf/p/9910155.html
Copyright © 2011-2022 走看看