第一章:什么是设计模式?

1.设计模式简介

设计模式是在软件开发过程中遇到的一般问题的解决方案,是解决特定问题的最佳实践,是软件开发人员对代码设计经验的总结。

2.为什么要使用设计模式呢?

编程过程中使用设计模式,可以提高代码的重用性,让代码更可靠,同时让其他开发人员更容易理解程序,

3.常见的设计模式有哪些?

常见的设计模式一共有23中,可以分为3大类,它们分别是创建型模式结构型模式行为型模式

创建型模式提供了一种在创建对象的同时隐藏对象创建逻辑的方式,而不是直接同new运算符直接创建对象。

创建型模式包含两个主要的设计思想,他们分别是“将系统使用的具体类封装起来”和“隐藏这些具体类的实例的创建和组合方式”。

创建型模式又可细分为对象创建模式类创建模式,具体来说对象创建模式是指把对象创建的一部分推迟到另一个对象中,而类创建模式它将对象的创建推迟到子类中。

创建型模式通过某种方式从代码中移除了需要实例化的具体类的引用,使程序员在不修改现有代码的情况下改变程序的行为,增加了程序设计灵活性和代码的复用性;解耦对象的创建过程和使用场景,使系统的各个部分相互独立,提高了软件的可靠性和可维护性。

常见创建型模式主要包含以下5种设计模式:

第一章:什么是设计模式?_第1张图片

程序开发过程中遇到以下情况可以优先考虑使用创建型设计模式,他们分别是

  1. 一个系统和它的对象和产品的创建需要相互独立。
  2. 一组相关的对象被设计为一起使用。
  3. 隐藏一个类库的具体实现,仅暴露它们的接口。
  4. 创建独立复杂对象的不同表示。
  5. 一个类希望它的子类实现它所创建的对象。
  6. 类的实例化在运行时才被指定。
  7. 一个类只能有一个实例,而这个实例能在任何时候访问到。
  8. 实例应在不修改的情况下具有可扩展性。

结构型模式关注的是类和对象之间的组合。目的是为了形成更大、更复杂、更灵活的结构,从而满足程序设计中对复杂结构的需求。

结构型模式同样也分为类结构型模式对象结构型模式类结构模式采用继承机制来组织类和接口,对象结构型模式采用组合或聚合方式组织对象。

使用创建型模式类似于搭积木,通过不同类和对象的组合,形成更为强大结构,已达到简化系统整体复杂度的目的,它使得系统更容易扩展,提高代码的复用率;它允许不兼容接口之间协同工作,从而降低了组件之间的耦合度;通过将抽象和实现分离,使系统不同的组件相互独立,提高了系统整体的扩展性和维护性。

常见的结构型模式主要包含以下8种设计模式:

第一章:什么是设计模式?_第2张图片

程序设计过程中遇到以下情况可以考虑使用结构型模式 ,他们分别是:

  1. 需要将现有对象转化为另一个接口以实现兼容时,可以考虑适配器模式。
  2. 需要分离抽象部分和实现部分,以便它们可以相互独立变化时,可以考虑桥接模式。
  3. 需要创建一个由多个相似对象组合而成的树形结构时,可以考虑使用组合模式。
  4. 需要为一个对象动态添加功能,而不改变它的接口时,可以考虑使用装饰器模式。
  5. 需要一系列统一的接口,来访问复杂的子系统时,外观模式是一个好选择。
  6. 需要优化性能,尤其是存在大量相似对象时,享元模式可以通过共享对象来减少内存占用。
  7. 需要在不改变原始基础上进行访问控制和增加操作时,通常使用代理模式。
  8. 需要实现数据过滤或者权限控制时,过滤器模式是一个很好的选择。

行为型模式通常用来描述多个类或对象怎么样通过相互协作共同完成单个对象无法完成的流程控制任务,它侧重于对象之间的通信、职责分配和复杂的流程控制。

行为型模式同样可分为类行为型模式对象行为型模式类行为型模式通过继承方式来分配不同类之间的行为。对象行为型模式通过组合或聚合方式来分配对象之间的行为。由于组合或聚合关系比继承关系耦合度更低,满足“合成复用原则”,因此相比类行为型模式对象行为型模式具有更大的灵活性。

行为型模式通过定义对象之间的交互方式,通过封装系统中的行为变化,可以使程序员在不改变现有代码的情况下很方便的扩展或改变系统的行为,提高了系统的灵活性;另外通过减少类之间的直接依赖来降低系统组件之间的耦合度,实现组件之间相互独立,同时提高系统整体的可靠性和可维护性。

常见的行为型模式包含以下几种:

第一章:什么是设计模式?_第3张图片

程序设计过程中遇到以下情况可以考虑使用行为型模式:

  1. 需要灵活替换或者选择算法时。
  2. 当对象的内部状态和行为密切相关时
  3. 需要将请求的发送者和接受者解耦时。
  4. 对象之间的责任链传递。
  5. 发布-订阅事件的管理。
  6. 访问集合对象的优化。
  7. 复杂对象结构的处理。

4.设计模式所遵循的通用原则有哪些?

  1. 开放封闭原则(Open Close Principle)

    对扩展开放,对修改关闭。意思是尽量通过扩展来解决需求变化,而不是通过修改已有代码来完成变化。
  2. 里氏替换原则(Liskov Substitution Principle)

    可以使用基类的地方,一定同样可以用基类的子类。
    意思子类可以扩展基类的功能,但不能改变基类原有的功能。子类可以实现基类的抽象方法或者增加自己特有的方法,但不能覆盖基类的非抽象方法。

    LSP是实现对象抽象化的具体步骤的规范;也是实现开放封闭原则的重要手段之一。
  3. 依赖倒转原则(Dependence Inversion Principle)

    核心思想是面向接口编程,它要求我们在传递参数或者组合对象时,尽量使用层次更高的抽象类。它是OSP 实现的基础,具体指的是依赖于接口,而不依赖于具体。
  4. 接口隔离原则(Interface Segregation Principle)

    使用多个接口隔离,比使用单个接口好。意思是将不同的功能分别定义在不同的接口中,从而实现降低系统之间耦合度的目标。

    例如:将订单系统中的下单功能和支付功能定义在不同的接口,从而实现下单功能和支付功能的解耦。
  5. 迪米特原则(最少知道原则)(Demeter Principle)

    一个对象应当尽可能少的了解其他对象。简称类间解耦,意思是一个类尽量少依赖其他对象,以降低类之间的耦合度,
  6. 单一职责原则(Principle of Single Responsibility)

    一个方法只负责一件事。
    意思是一个类或者方法只负责一个职责,各个职责的程序改动,不影响其他程序。

5.为什么要学习/使用设计模式?

1.现在市面上比较流行的框架如Spirng, SpringMVC包括Java JDK 的代码中大量使用了设计模式,通过学习设计模式我们可以很容易的看懂源代码。

2.学习设计模式有助于编写自己理想中的代码,可以帮助公司设计出更健壮和更容易维护的系统。

3.可以促进团队写作,设计模式为团队成员之间提供了共同的语言,当团队中大部分都是用设计模式时,讨论问题,提出解决方案和编写文档都会变的更加容易。

你可能感兴趣的:(设计模式,设计模式,java,开发语言)