zoukankan      html  css  js  c++  java
  • PHP 设计模式总结

      回想了一下php的设计模式,好像记得不完全了。此处对php设计模式重新做一下复习总结。

      单例模式

      单例模式的核心只包括一个特殊的类,保证系统中只能有一个实例,即一个类中只能有一个实例化对象,避免系统中有大量的new操作。

      单例模式创建有四个要点:

      1、私有化的静态属性(用于保存建立的类的实例对象),

      2、私有化 的构造方法(防止从外部new生成对象),

      3、私有化的克隆方法(防止外部重过clone(克隆)方法生成对象),  

      4、公有化的静态方法(调用当前单例类的一个入口。)

    <?php
    header("Content-type:text/html;charset=utf-8");
    class danli{
        static private $obj;  //私有化的静态属性,保存实例对象
    
        private function __construct(){  //私有化的构造方法
            //echo "Is New() Ok";
        }
    
        private function __clone(){}  //私有的克隆方法
    
        static public function getInstanceEntry(){  //公有化的静态方法,外部实例对象的入口
            
            if(!self::$obj instanceof self){   //instanceof判断对象是否实例化
                self::$obj = new self();  //或者是new danli()
            }
            return self::$obj;
        }
    
        public function getName($nn){
            return $nn;
        }
    }
    
    
    $t = danli::getInstanceEntry();
    echo $t -> getName('ABC');
    ?>

      为什么我们需要使用单例模式?

      1.php主要在于数据库应用,在应用中必定会进行大量的操作,在面向对象中使用单例模式可以避免大量的new​ 操作浪费资源。

    ​  2.在系统中,使用一个全局类控制配置信息时,使用单例模式会方便的多。

      3.进行页面请求时,由于代码语句都在一个类中,会便于调试。​

      优点:灵活,通用,没有限制死。

      缺点:没有完全限制单例效果。

      工厂模式

      工厂模式:就是一个类,在这个类中是一些创建对象的方法,这样我们就可以使用工厂类去创建对象而不是直接使用new,如果要修改对象类型,直接在工厂类中修改即可。

      典型的实现是:工厂模式中的方法几乎都是静态方法。

      工厂模式有三种:简单工厂模式​、工厂模式、抽象工厂模式

      简单工厂模式:​实现算法和界面的分离,也就是将业务逻辑和界面逻辑分开了,降低了耦合度。作为一个独立的类,实现了针对不同的算法进行实例化。

      算法的封装:  定义一个抽象的算法接口,提供不同算法的公共接口方法。其他具体算法继承这个抽象类,并实现具体的算法。

    //简单工厂模式
    class gongchang{
        static public function fact($n){
            if($n == 1) return new A();
            elseif ($n == 2) return new B();
            elseif ($n == 'c') return new C();
            return new de();
        }
    }
    Interface InstanceEntry{  
        public function getname();
    }
    
    class A implements InstanceEntry{
        private $n = "AAAAAAAA";
        public function getname(){return $this->n;}
    }
    class B implements InstanceEntry{
        private $n = "BBBBBBB";
        public function getname(){return $this->n;}
    }
    class C implements InstanceEntry{
        private $n = "CCCCCCCC";
        public function getname(){return $this->n;}
    }
    class de implements InstanceEntry{
        private $n = "morenjieguo";
        public function getname(){return $this->n;}
    }
    
    
    
    $test = gongchang::fact(2);
    echo $test->getname();
    ?>

      工厂模式:

      定义一个用于创建对象的接口,让子类决定实例化哪一个类。  遵循了开放—封闭原则。​专门用来生成对象,外部给个类,内部帮生产,最终返回对象​。

      抽象工厂模式:

       提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。​最大的特点就是便于两个数据库之间的切换。

  • 相关阅读:
    上机练习
    myeclipse 快捷键
    关于java classpath问题
    windows installer 出错问题解决
    hibernate 问题
    axis2 部署webservice
    webservice开发
    关于web前端开发
    软件工程工具
    计网笔记
  • 原文地址:https://www.cnblogs.com/lovele-/p/9233451.html
Copyright © 2011-2022 走看看