设计模式总共有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),迪米特法则或最少知识原则:一个对象应当尽可能少的去了解其他对象。