程序员框架原理面试

最易懂设计模式解析

2018-11-22  本文已影响26人  GGarrett

设计模式目录

设计模式-图片来源网络

1. 设计模式的概念

  1. 设计模式不是一成不变的,而是在不断发展中。
  2. 设计模式不是软件行业独有的,事实上,有很多行业有自己的设计模式。

2. 学习设计模式的好处

3. 设计模式的设计原则

设计原则
SOLDIA原则:

在程序设计中如果发现某个类承担着多种义务,可以进行拆分,若多个职责总同时发生改变则可以将它们封装到一个类中。

  1. 程序设计要保证平滑性的扩展性,尽量避免因为新增同类功能而修改已有实现,这样可以少产出回归问题。
  2. 抽象化是开闭原则的关键,可以通过它们定义系统的抽象层,再通过具体类进行扩展。需要修改系统行为,无须对抽象层动手,只需增加新的具体类来实现新的业务功能即可。

在软件开发中,一个基类对象替换成子类对象,程序不会产生任何错误和异常。

  1. 也就是说,在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。这一原则是降低产品代码之间的耦合。
  2. 在程序中尽量使用抽象层进行编程,而将具体类写在配置文件中,这样一来,如果系统行为发生变化,只需要对抽象层进行扩展,并修改配置文件,而无须修改原有系统的源代码,在不修改的情况下来扩展系统的功能,满足开闭原则的要求。
  3. 在实现依赖倒置原则时,则需要针对抽象层编程,而将具体类的对象通过依赖注入( DI)的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。常用的注入方式有三种,分别是:构造注入,设值注入(Setter注入)和接口注入。构造注入是指通过构造函数来传入具体类的对象,设值注入是指通过Setter方法来传入具体类的对象,而接口注入是指通过在接口中声明的业务方法来传入具体类的对象。这些方法在定义时使用的是抽象类型,在运行时再传入具体类型的对象,由子类对象来覆盖父类对象。

在进行类和接口之间的设计时,如果一个接口定义了太多方法,其子类可能面临两难,就只有部分方法对它有意义,这就破坏了程序的内聚性。

新对象通过委派调用已有对象的方法达到复用功能的目的。简言之:复用时要尽量使用组合/聚合关系(关联关系),少用继承。

  1. 迪米特法则还有几种定义形式,包括:不要和“陌生人”说话、只与你的直接朋友通信等。
  2. 迪米特法则中对于一个对象,其朋友包括以下几类:
    (1) 当前对象本身(this);
    (2) 以参数形式传入到当前对象方法中的对象;
    (3) 当前对象的成员对象;
    (4) 如果当前对象的成员对象是一个集合,那么集合中的元素也都是朋友;
    (5) 当前对象所创建的对象。
  3. 迪米特法则运用到系统设计中应该注意几点:在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及;在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限;在类的设计上,只要有可能,一个类型应当设计成不变类;在对其他类的引用上,一个对象对其他对象的引用应当降到最低。

4. 设计模式的分类

GoF著作的23种设计模式,对于这23中设计模式GoF把它们分为三类:


23种设计模式

常用的设计模式有:

可以针对性的对这些模式去学习。

上一篇 下一篇

猜你喜欢

热点阅读