PHP面向对象设计模式和设计原则

一、设计模式

  1.单例模式

    目的:让一个类只能生成一个对象

    步骤:    ①将构造函数变成私有的

        ②在类里面做一个静态成员函数造对象

        ③在方法里加限制条件

    //单例模式
    class Ren{                //定义人类
        public static $r;    //设定静态成员变量,为了可以带入静态成员函数中
        public $name;        //普通成员变量,用于测试是否只实例化了一个对象
        private function __construct(){        //私有化构造函数,阻止实例化对象

        }
        public static function duixiang(){    //创建一个静态成员函数,用于访问构造函数以实例化对象
            if(empty(self::$r)){            //设定限制条件
                self::$r = new Ren();
            }
            return self::$r;                //返回$r中的唯一的实例化对象
        }
    }

    $r = Ren::duixiang();    //访问静态函数实例化对象
    $r->name = "张三";        //给对象的$name赋值"张三"
    $r1 = Ren::duixiang();    //测试是否只有一个对象
    var_dump($r1);

    只有一个对象

    

  

  工厂模式

    目的:做一个专门造对象的工厂

      如果一个父类的子类量比较庞大,子类名命名方式不一致,可以用这种模式以代号方式造对象

    //工厂模式
    class Jisuan{        //定义一个计算父类
        public $a;        //两个普通成员变量
        public $b;
        public function Js(){    //定义一个计算的普通成员函数
            echo"计算结果为";
        }
        public function __construct($a,$b){    //构造函数,用于实例化对象时设定初始的$a和$b的值
            $this->a = $a;
            $this->b = $b;
        }
    }
    class Jia extends Jisuan{    //子类加法
        public function Js(){    //子类重写的计算函数
            parent::Js();
            return($this->a+$this->b);
        }
    }
    class Jian extends Jisuan{    //子类减法
        public function Js(){    //子类重写的计算函数
            parent::Js();
            return($this->a-$this->b);
        }
    }
    class Cheng extends Jisuan{    //子类乘法
        public function Js(){    //子类重写的计算函数
            parent::Js();
            return($this->a*$this->b);
        }
    }
    class Chu extends Jisuan{    //子类除法
        public function Js(){    //子类重写的计算函数
            parent::Js();
            return($this->a/$this->b);
        }
    }
    class Quyu extends Jisuan{    //子类取余
        public function Js(){    //子类重写的计算函数
            parent::Js();
            return($this->a%$this->b);
        }
    }

    class GongChang{        //定义一个工厂类,用于生产实例化对象
        public static function duixiang($a,$b,$ysf){    //设置静态成员函数并传入参数,以运算符号代替子类的名称
            switch($ysf){        //分支较多,用switch case 语句设计不同运算符号所对应不同的子类并实例化对象
                case "+";
                    return new Jia($a,$b);
                    break;    

                case "-";
                    return new Jian($a,$b);
                    break;    

                case "*";
                    return new Cheng($a,$b);
                    break;    

                case "/";
                    return new Chu($a,$b);
                    break;    

                case "%";
                    return new Quyu($a,$b);
                    break;
            }
        }
    }
    $j = GongChang::duixiang(3,2,"%");    //测试
    echo $j->Js();    //输出

   输出结果   

二、设计六大原则

  1.开-闭原则,讲的是设计要对扩展有好的支持,而对修改要严格限制。

  2.里氏代还原则,子类必须能够替换基类,否则不应当设计为其子类。

  3.依赖倒换原则,设计要依赖于抽象而不是具体化,换句话说就是设计的时候我们要用抽象来思考,而不是一上来就开始划分我需要哪些哪些类,因为这些是具体。

  4.接口隔离原则,将大的接口打散成多个小接口

  5.单一职责:一个类的功能尽量单一,降低耦合

  6.迪米特法则(最少知识原则),一个对象应当对其他对象有尽可能少的了解,不和陌生人说话

原文地址:https://www.cnblogs.com/zxbs12345/p/8267447.html

时间: 2024-10-11 03:48:39

PHP面向对象设计模式和设计原则的相关文章

设计模式——设计模式与设计原则

设计模式--设计模式与设计原则 一.设计模式  1.设计模式简介 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石. 模式的经典定义:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的解决方案,无需再

设计模式与设计原则简介(一)

什么是设计模式? 我们知道对于很多数学问题,经常会有多种不同的解法 而且这其中可能会有一种比较通用简便高效的方法 我们在遇到类似的问题或者同一性质的问题时,也往往采用这一种通用的解法 将话题转移到程序设计中来 对于软件开发人员, 在软件开发过程中, 面临的一般问题的解决方案就是设计模式(准确的说是OOP中) 当然,如同数学的解题思路一样,设计模式并不是公式一样的存在 设计模式(Design pattern)代表了最佳的实践 是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的宝贵经验 是

设计模式 - 七大设计原则(一)

设计模式 - 七大设计原则(一) 概述 简单介绍一下七大设计原则: 开闭原则:是所有面向对象设计的核心,对扩展开放,对修改关闭 依赖倒置原则:针对接口编程,依赖于抽象而不依赖于具体 单一职责原则:一个接口只负责一件事情,只能有一个原因导致类变化 接口隔离原则:使用多个专门的接口,而不是使用一个总接口 迪米特法则(最少知道原则):只和朋友交流(成员变量.方法输入输出参数),不和陌生人说话,控制好访问修饰符 里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能 合成复用原则:尽量使用对象组

设计模式之设计原则学习

设计模式的设计原则包含了:单一职责原则.里氏替换原则.依赖倒置原则.接口隔离原则.迪米特法则和开闭原则等6大原则. 单一职责原则(Single Responsibility Principle,简称SRP),英文介绍为:There should never be more than one reason for a class to change,即一个类,应当只有一个引起它变化的原因.单一职责原则,要求对象不能承担太多的职责,充分保证对象的高内聚.单一职责的优点有:1.降低了类的复杂性:2.提

设计模式之设计原则(中)

接口隔离原则(Interface Segregation Principle ),简称ISP:该原则核心思想就是客户端不应该被强迫实现一些不会使用的接口,应该把胖接口中的方法分组,然后用多个接口来代替,每一个接口只服务与一个子模块.这个跟上次分享的单一职责原则类似. 设计接口隔离原则的目的:当我们设计应用程序时,如果一个模块包含多个子模块,那我们应该正对该模块抽象.设想该模块由一个类实现,我们可以把系统抽象成一个接口,但是我们想要添加新的模块扩展程序时,如果要添加的模块只包含原来系统的一些子模块

设计模式与设计原则

0.0 什么是设计模式与设计原则: 设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用设计模式是为了重用代码.让代码更容易被他人理解.保证代码可靠性.设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样. 0.1 什么是设计原则: 设计原则是设计模式的基础,所有设计模式都必须遵循设计原则. 设计原则共有七条:单一职责原则.开放-封闭原则.里氏替换原则.依赖倒转原则.接口隔离原则.组合重用原则.迪米特原则. 1. 单一职责原则(Sing

面向对象的几大设计原则

对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一.在面向对象设计中,可维护性的复用是以设计原则为基础的.每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升一个软件结构的设计水平.       面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则.面向对象设计原则也是我们用于评价一个设计模式的使用效果的重

设计模式之设计原则 C#

成为一名资深架构师首先要懂设计模式,在懂之前,要清楚设计原则,原来我就吃过这个亏,很久以现有人问我设计原则,我是一头茫然,不是只有设计模式吗?且不知设计原则就像是写书法一样,楷体就是方正,竖道有垂露等,隶书横有蚕头燕尾等. 这些"秩序"遵循SOLID architecture principles.这组面向对象的设计原则,通过实践总结为 1),SRP(Single Responsibility Principle):单一责任原则: A class should take care of

设计模式--六大设计原则

1.单一职责原则(SRP ) 定义:Single Responsibility Principle ? 不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来: ? 类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障. 解决方案: ? 遵循单一职责原则.分别建立两个类T1.T2,使T1完成职责P1功能,T2完成职责P2功能.这样,当修改类T1时,不会使职责P2发生故障风险:同理,当修改T2