面相对象设计模式

  设计模式总共有23种,最有代表性的两种是:单例模式和工厂模式。

  单例模式:

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

    步骤:

      1.将构造函数做成私有的;

      2.在类里面做一个函数造对象;

      3.在方法里面加限制条件。

class Ren{
    public static $r;
    public $name;
    private function __construct(){
        
    }
    public static function duixiang(){
        if(empty(Ren::$r)){
            Ren::$r = new Ren();   //不用类名可以用self
        }
        return Ren::$r;
    }
}
$r = Ren::duixiang();
$r->name = "张三";
var_dump($r);

  工厂模式:

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

class Suan{
    public $a;
    public $b;
    public function yunsuan(){
    
    }
}
class Jia extends Suan{
    public function yunsuan(){
        return $this->a+$this->b;
    }
}
class Jian extends Suan{
    public function yunsuan(){
        return $this->a-$this->b;
    }
}
class Gongchang{
    public static function duixiang($ysf){
        switch($ysf){
            case "+":
            return new Jia();
            break;
            case "-":
            return new Jian();
            break;
        }
    }
}
$j = Gongchang::duixiang("+");  //只需要给出指定的符号即可输出
$j->a = 10;
$j->b = 5;
echo $j->yunsuan();

  OOP表示面向对象,基本上有6大原则,而实际上都是互补的,也就是说一些原则需要利用另一些原则来实现自己:

    1. Open-Close Principle(OCP),开-闭原则:设计要对扩展有好的支持,而对修改要严格限制;

    2.Liskov Substituition Principle(LSP),里氏代换原则:子类必须能够替换基类,否则不应当设计为其子类。”也就是说,子类只能去扩展基类,而不是隐藏或覆盖基类;

    3.Dependence Inversion Principle(DIP),依赖倒换原则:设计要依赖于抽象而不是具体化,设计的时候我们要用抽象来思考,而不是一上来就开始划分我需要哪些哪些类,因为这些是具体;

    4.Interface Segregation Principle(ISP),接口隔离原则:将大的接口打散成多个小接口,使多个接口分担这个大接口的功能;

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

    6.Law of Demeter  or  Least Knowlegde Principle(LoD or LKP),迪米特法则或最少知识原则:一个对象应当尽可能少的去了解其他对象。

原文地址:https://www.cnblogs.com/maoqiaoyu123/p/8267111.html