PHP设计模式PHPDesignPattern01面向对象(ObjectOriented)02设计模式(DesignPattern)03概述23种设计模式04细说5种常用设计模式05总结目录contentOO面向对象OO=面向对象的分析OOA+面向对象的设计OOD+面向对象的编程OOP面向过程•关注做事情的步骤•关注数据的加工存储•使用结构化方法分析设计•适合瀑布模型开发面向对象•关注对现实世界的建模还原•使用面向对象方法分析设计•适合RUP、敏捷等模型开发OO设计基本原则•开闭原则OCP:对扩展开放,对修改关闭•单一职责SRP:一个类只做一件事•里氏替换LSP:子类必须能够替换所有父类的使用•依赖倒置DIP:设计依赖于抽象而不是实现•最少知识DP:对象应当尽可能少的去了解其他对象•接口隔离ISP:接口倾向于小而多•组合优先CRP:优先使用类的组合而不是继承•参考:大类设计模式•创建型模式(5种)创建对象时,不再由我们直接实例化对象;而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。•结构型模式(7种)用于帮助将多个对象组织成更大的结构。•行为型模式(11种)用于帮助系统间各对象的通信,以及如何控制复杂系统中流程。5种创建型模式•工厂模式(FactoryPattern)•单例模式(SingletonPattern)•抽象工厂模式(AbstractFactoryPattern)•建造者模式(BuilderPattern)•原型模式(PrototypePattern)7种结构型模式•适配器模式(AdapterPattern)•装饰器模式(DecoratorPattern)•代理模式(ProxyPattern)•外观模式(FacadePattern)•桥接模式(BridgePattern)•组合模式(CompositePattern)•享元模式(FlyweightPattern)11种行为型模式•策略模式(StrategyPattern)•模板模式(TemplatePattern)•观察者模式(ObserverPattern)•迭代子模式(IteratorPattern)•责任链模式(ChainofResponsibilityPattern)•命令模式(CommandPattern)•备忘录模式(MementoPattern)•状态模式(StatePattern)•访问者模式(VisitorPattern)•中介者模式(MediatorPattern)•解释器模式(InterpreterPattern)PHP中的接口•使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。•接口是通过interface关键字来定义的,就像定义一个标准的类一样,但其中定义的所有方法都是空的。•接口中定义的所有方法都必须是公有,这是接口的特性。•参考:接口实现(implements)•类可以实现多个接口,用逗号来分隔多个接口的名称。•实现多个接口时,接口中的方法不能有重名。•接口也可以继承,通过使用extends操作符。•类要实现接口,必须使用和接口中所定义的方法完全一致的方式。否则会导致致命错误。•接口中也可以定义常量。接口常量和类常量的使用完全相同,但是不能被子类或子接口所覆盖。类的关系•依赖(Dependence)•关联(Association)•聚合(Aggregation)•组合(Composition)•继承(Generalization)•实现(Implementation)•耦合度:由上到下依次增强•参考:种常用模式•单例模式•工厂模式•策略模式•命令模式•观察者模式单例模式(Singleton)•确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。•单例模式根据实例化对象时机的不同分为两种:1.饿汉式单例:在单例类被加载时候,就实例化一个对象交给自己的引用2.懒汉式单例:在调用取得实例方法的时候才会实例化对象•参考:工厂模式(Factory)•定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。•工厂模式根据抽象程度的不同分为三种:1.简单工厂模式(也叫静态工厂模式)2.工厂方法模式(大话设计模式上的UML图)3.抽象工厂模式•参考:策略模式(Strategy)•定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户•参考:大话设计模式,商场促销命令模式(Command)•定义:将一个请求封装为一个对象,从而是你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。•作用:1.能比较容易的设计一个命令队列2.可以比较容易的将命令记入日志3.允许接受请求的一方决定是否要否决请求4.可以容易的实现对请求的撤销和重做5.新增不会印象到其他命令6.实现了调用对象和执行对象•参考:大话设计模式——命令模式观察者模式(Observer)•定义:一种一对多的以来关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。•观察者模式是“依赖倒置原则”的最好体现•观察者模式所做的工作其实就是在接触耦合。让耦合的双方都以来抽象,而不是依赖于具体。从而是的各自的变化都不会影响到另一边的变化。•参考:思考题•ThinkPHP中如何应用设计模式?总结•设计模式和数据结构一样是软件开发的内功•设计模式的目的是降低软件的复杂度•学习设计模式应该先“记住”再“忘记”•光看是学不会的,一定要多实践•如果想成为一名更优秀的软件设计师,了解优秀软件设计的演变过程比学习优秀设计本身更有价值,因为设计的演变过程中蕴藏着大智慧•重要的不是你将来会不会用这些模式,而是通过这些模式让你找到“封装变化”、“对象间松散耦合”、“针对接口编程”的感觉,从而设计出易维护、易扩展、易复用、灵活性好的程序参阅(附件及代码下载地址:)•菜鸟教程——设计模式•视频:慕课网——大话PHP设计模式=kuaike•附件:经典文档-23种设计模式.docx(有所有设计模式的UML类图,无代码)•附件:Java各种设计模式详解(整理版).doc(很详细,有代码)•附件:24种设计模式介绍与6大设计原则.pdf(要是觉得枯燥可以看这个,有代码有剧情)•附件:大话设计模式(强烈推荐,C#)•附件:HeadFirst设计模式(强烈推荐,JAVA)•附件:PHP设计模式.pdf(强烈推荐,PHP)•大神的博客:•大杂烩:极客学院vip视频谢谢大家THANKYOUbyCTY2017.1