《大话设计模式》一些摘抄和笔记

199 阅读4分钟

1.一些基础

1.1 类与实例

  • 类具有相同的
  • 属性和功能的对象的抽象的集合。
  • 实例是真实的对象。
  • 实例化创建一个实例的过程,new一个对象。

1.2 封装,继承,多态

  是面向对象三大特性。

面向对象,考虑封装、继承、多态把程序的耦合度降低,使得程序更加灵活,已修改,易复用。

第一章 简单工厂模式

业务封装:业务逻辑和界面逻辑分开。

1、模式内容

以计算器实现为例:

  1. 编写界面逻辑类调用业务逻辑类。
  2. 定义工厂类,通过页面逻辑类中传值,工厂实例化出合适的对象。(通过多态返回父类的方式实现)
  3. 实现业务逻辑类:先抽象得到父类(操作类),再编写具体实现类继承父类并重写计算方法。

简单工产模式

页面逻辑类,调用工程类,传值让工厂类判断实例化对象。

工厂类,依赖具体运算实现类。

运算类,是所有具体运算类(如加减乘除)的父类。

  其实是解决了对象的创建问题。通过工厂来选择具体实例化的类,创建出合适的对象。

第二章 策略模式

策略模式:定义了算法家族,分别封装起来,让它们直接之间可以相互替换。

策略模式封装了变化点。

2、 策略模式

客户端,调用上下文,传入不同实例化对象,让上下文实现不同策略。

上下文(Context): 维护对一个Strategy的引用。根据不同的策略,获得不同的结果。

抽象策略类,(从具体策略中抽取,是具体策略类的父类)

具体策略类:继承抽象策略类,实现具体算法。

3、策略模式和简单工厂模式的不同点

简单工程模式

  是创建式模式,实质是由一个工厂类根据传入的参数,动态决定应该创建并且返回哪一个产品类(这些产品类继承自一个父类或接口)的实例。

  主要用于创建对象的选择上。 假如新添了产品类就得修改工厂类,这样就会违反开闭原则。

策略模式

  是行为型模式,定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。通过选择对应的策略类,作为参数传到Content类里,在运行时配置对应的算法。

  在一段代码里,使用了逻辑控制(if-else,swich-case)来决定算法,算法有相似的方法和函数,就可以选择策略模式。

  运行时,两者都是通过传入参数进行配置,简单工厂模式则是选择创建出需要的对象,而策略模式则是配置出需要的行为算法。一个是对象创建,另一个是行为算法的替换。

第三章 单一职责模式

  单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因。

解释:如果一个类职责过多,相当于把这些职责耦合在一起。一个职责的可能会削弱或者一直这个类完成其职责的能力。

软件设计要做的是,发现职责并把那些职责相互分类。 如果有多余一个的动机去改变一个类,那么这个类就具有多于一个的职责。

举例:
    游戏中,界面和游戏逻辑分割开。

第四章 开放-闭合原则

  开放-闭合原则:软件实体(类、模块、函数等等)可扩展,但不可修改。即,开放扩展,封闭修改。

  如果遇到新需求,该程序是新增代码而不是修改代码。如果修改代码就要考虑重构,抽象。(抽象只抽取频繁变化的)。

第五章 依赖倒转原则

A、高层模块不应该依赖低层模块,两个都应该依赖抽象。

B、抽象不应该依赖细节,细节应该依赖抽象