[面试直通版]设计模式-2-

目录

装饰器模式

解决问题:

为什么需要装饰器模式

装饰器模式的实现方式

装饰器模式的优劣

代理模式

解决问题:

为什么需要代理模式

代理模式的实现方式

代理模式的优劣

设计模式的七大原则

开闭原则

里氏替换原则

依赖倒置原则

单一职责原则

接口隔离原则

迪米特法则

合成复用原则


  • 装饰器模式

  • 解决问题:

  • 为什么需要装饰器模式
  • 装饰器模式的实现方式
  • 装饰器模式的优劣
  • 为什么需要装饰器模式

  • 定义:
  • 指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式
  • 为什么:
  • 在软件开发过程中,有时想用一些现存的组件
  • 这些组件可能只是完成了一些核心功能
  • 但在不改变其结构的情况下,可以动态地扩展其功能
  • 所有这些都可以釆用装饰器模式来实现
  • 装饰器模式的实现方式

  • 创建一个 Shape 接口和实现了 Shape 接口的实体类
  • 然后创建一个实现了 Shape 接口的抽象装饰类 ShapeDecorator,并把 Shape 对象作为它的实例变量
  • RedShapeDecorator 是实现了 ShapeDecorator 的实体类
  • DecoratorPatternDemo 类使用 RedShapeDecorator 来装饰 Shape 对象
  • 装饰器模式的优劣

  • 优:
  • 装饰器是继承的有力补充,比继承灵活
  • 不改变原有对象的情况下动态的给一个对象扩展功能,即插即用
  • 通过使用不用装饰类及这些装饰类的排列组合,可以实现不同效果
  • 劣:
  • 装饰器模式会增加许多子类、过度使用会增加程序的复杂性
  • 代理模式

  • 解决问题:

  • 为什么需要代理模式
  • 代理模式的实现方式
  • 代理模式的优劣
  • 为什么需要代理模式

  • 定义:
  • 由于某些原因需要给某对象提供一个代理以控制对该对象的访问
  • 这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介
  • 为什么:
  • 一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象
  • 例如,购买火车票不一定要去火车站买,可以通过12306网站或者去火车票代售点买
  • 代理模式的实现方式

  • 点击->Proxy-静态代理<-点击
  • 点击->Proxy-动态代理<-点击
  • 代理模式的优劣

  • 优:
  • 在客户端与目标对象之间起到一个中介作用和保护目标对象的作用
  • 代理对象可以扩展目标对象的功能
  • 在一定程度上降低了系统的耦合度,增加了程序的可扩展性
  • 劣:
  • 代理模式会造成系统设计中类的数量增加
  • 增加一个代理对象会造成请求处理速度变慢
  • 增加了系统的复杂度
  • 设计模式的七大原则

  • 开闭原则

  • 当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求
  • 对软件测试的影响
  • 提高代码的可复用性
  • 提高代码的可维护性
  • 里氏替换原则

  • 里氏替换原则通俗来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能
  • 具体些:
  • 子类可以实现父类的抽象方法,但不要覆盖父类的非抽象方法
  • 子类可以实现子类特有的方法
  • 子类重载父类方法时,方法的输入一定要比父类方法更宽松
  • 子类实现父类方法时,方法的输出一定要比父类方法更加严格
  • 依赖倒置原则

  • 依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;
  • 抽象不应该依赖细节,细节应该依赖抽象,要面向接口编程,不要面向实现编程
  • 依赖倒置原则可以降低类之间的耦合性
  • 依赖倒置原则可以提高系统的稳定性
  • 依赖倒置原则可以减少并行开发引起的风险
  • 依赖倒置原则可以提高代码的可读性和可维护性
  • 单一职责原则

  • 单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分
  • 降低类的复杂度
  • 提高类的可读性
  • 提高系统的可维护性
  • 变更引起的风险降低
  • 接口隔离原则

  • “接口隔离原则”的定义是:客户端不应该被迫依赖于它不使用的方法
  • 提高系统的灵活性和可维护性
  • 提高了系统的内聚性
  • 保证系统的稳定性
  • 减少项目工程中的代码冗余
  • 迪米特法则

  • 如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用
  • 其目的是降低类之间的耦合度,提高模块的相对独立性
  • 降低了类之间的耦合度,提高了模块的相对独立性
  • 提高了类的可复用率和系统的扩展性
  • 过度使用迪米特法则会使系统产生大量的中介类
  • 增加系统的复杂性,降低模块之间的通信效率
  • 合成复用原则

  • 合成复用原则要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现
  • 继承复用破坏了类的封装性
  • 继承使得父类与子类的耦合度过高
  • 组合复用维持了类的封装性,新旧类之间耦合度低
  • 组合复用的灵活性高

你可能感兴趣的:(面试直通-设计模式,面试,设计模式,职场和发展)