设计模式

基础

  • http://c.biancheng.net/design_pattern
  • https://www.runoob.com/design-pattern
  • 面向对象的三大基本特征和五大基本原则
  • 主流的编码风格有三种,面向过程、面向对象、函数式编程
  • 面向对象三大特征(算上抽象是四大):
    1. 封装:隐藏对象的属性和实现细节,仅对外公开访问方法。
      • protected:本类和继承类调用
      • private:只能本类调用
    2. 继承:子类可以延用父类的特征和方法。
    3. 多态:类的相同方法在不同情形有不同表现形式。
      • 重写:参数列表相同,返回类型一定相同,访问修饰只能更松
      • 重载:参数列表不同,返回类型可以不同,访问修饰随意
  • 面向对象五大原则:
    1. 单一职责:一个类,最好只做一件事
    2. 开闭原则:对扩展开放,对修改关闭
    3. 里氏替换:子类可以替代父类提供服务
    4. 依赖倒置:上层不依赖下层,两者都依赖于抽象
    5. 接口隔离:最好使用小而专的接口

PHP 相关

  1. final,修饰的类不能被继承,修饰的方法不能被重写和重载,不能修饰属性
  2. const,只能修饰属性,即为常量属性

抽象和接口的区别

类目 抽象 接口
方法实现 有具体的实现 只有方法的声明没有实现
使用方式 extends,子类只需要实现只被声明的方法 implements,子类要实现所有声明
构造器 可以有构造器 不能有
访问修饰 可以有访问修饰 不能有

单例模式需要注意的

  1. 用static保存一个唯一的实例,提供public的static方法调用
  2. 构造函数和析构函数必须声明为私有
  3. __clone防止被复制

基于编程方法论的设计模式,按照目的分为三大类:

  1. 创建型:单例模式(程序运行时多次用到且资源是独占的),简单工厂模式(工厂类只有一个)、工厂模式(一个工厂类对应一个产品类,需要知道工厂名)、抽象工厂模式(工厂类可以创建同族产品)、建造者模式(产品、抽象构造者、具体构造者、导演)。如果抽象工厂模式是汽车配件生产工厂,那么建造者模式就是汽车组装工厂,可以返回一辆完整的汽车。
  2. 结构型:代理模式(客户端与目标对象之间起到一个中介和保护作用)、桥接模式(m*n的实现类变成m+n+抽象桥接类)、装饰者模式(类似装饰器)、适配器模式(飞虎:增加一个适配器,在里面包含一个虎的对象,实现飞的接口)
  3. 行为型:观察者(一对多的依赖关系,降低目标与观察者之间的耦合)、策略(基于接口的不同的算法策略类,它们可相互替换,客户端通过策略名来选择)、职责链(将请求的发送者和请求的处理者解耦了)、迭代器(实现类里增加getIterator方法用来迭代内部数据)、模板(抽象类一次性实现算法的不变部分,并将可变的行为留给子类来实现)
  4. 抽象类和接口的区别:语法特性上,抽象类中可以定义属性、方法的实现,而接口中不能定义属性,方法也不能包含代码实现等等;抽象类是对成员变量和方法的抽象,是一种is-a(继承)关系,是为了解决代码复用问题。接口仅仅是对方法的抽象,是一种has-a(具有)关系,表示具有某一组行为特性,是为了解决解耦问题。

results matching ""

    No results matching ""