西维蜀黍

【Design Pattern】Structural - Adapter

Adapter Pattern

  • The adapter design pattern solves problems like:

    • How can a class be reused that does not have an interface that a client requires?
    • How can classes that have incompatible interfaces work together?
    • How can an alternative interface be provided for a class?

    Often an (already existing) class can’t be reused only because its interface doesn’t conform to the interface clients require.

  ...


【Design Pattern】Structural - Flyweight/ Object Pool

1 动机

通过尽可能共享对象中的数据来实现对内存的最小化使用,这就是享元模式的动机。

一个典型的例子是:在Word中,对字符的图形化展现。如果每一个显示的字符都对应一个独立的对象,这将会消耗大量的内存。取而代之,位于文档中不同位置的相同字符会共享大部分属性,而只有字符位置这样的属性才需要被单独保存。

  ...


【Design Pattern】Behavioural - Observer

1 定义

观察者模式(Observer Pattern)定义了一种一对多的依赖对象关系,使得当那一个对象状态发生改变时,依赖它的多个对象均能得到通知并自动更新(做出相应反应)。

  ...


【Design Pattern】Behavioural - Chain of Responsibility Pattern

Intent

Chain of Responsibility is a behavioral design pattern that lets you pass requests along a chain of handlers. Upon receiving a request, each handler decides either to process the request or to pass it to the next handler in the chain.

  ...


【Design Pattern】Behavioural - Strategy

动机

  • 完成一项任务可以有多种不同的方法,每一种方法都可称为一个策略。在特定环境下,我们可以根据不同的需求和具体的环境来决定采用哪一个策略来完成特定的任务;
  • 在软件开发中也是类似的,我们可以使用不同的策略来实现一项功能。比如排序,可以**采用快排(Quick Sort),插入排序(Insert Sort)或选择排序(Selection Sort)**等等。这些不同的排序算法都能实现排序功能,只是他们进行排序时的效率不同。因此,我们要根据具体的情况,来具体选择一个排序算法,以使得在当前情况中排序效率最高;
  • 为了使系统具有较强的扩展性(可能在未来,我们还需要增加新的排序算法),我们的代码需要遵循开闭原则(The Open Closed Principle);
  • 同时,我们编写的这个类对应的调用者(Client),不应该依赖于这个类具体的实现(Implementation),而仅仅依赖于对应的抽象(Abstraction)。或者说,面向接口编程(Program to an interface, not an implementation);
  • 可能有人会提出,我们可以编写一个SortingHelper类(这个类实现了ISortingHelper接口),这个类中包含不同的方法,每个方法都是一种具体排序算法的实现(比如快排、插入排序等等)。很棒!这是一种很好的实现(具有扩展性,同时面向接口编程)。这种实现事实上对应了另一个设计模式,称为模板方法模式(Template Method Pattern)。但这样的实现无法做到在运行时可以任意地切换不同的排序算法;
  • 我们也可以设计一个策略接口(对应于上面例子,则为排序帮助接口),同时包含多个实现了该接口的策略实现类(对应于上面例子,则为XX排序帮助类,如插入排序帮助类)。
  ...


【Architectural Pattern】Model – View – Controller (MVC)

1 背景

MVC (Model - View - Controller)架构是一种当前非常流行的架构模式(Architectural Pattern),被广泛使用于传统的桌面GUI(Graphical user interface)、Web应用和手机移动应用中。

  ...


【Java】Intellij调试程序断点进入JDK源码

需求

在IntelliJ中,希望调试自己的程序时,断点能够进入JDK的源代码。

  ...


【Java】Java程序的编译与运行

本文将按照Java源代码从编译到执行的过程,进行一步一步的分析。

  ...


【JavaScript】JavaScript 单线程与异步

JavaScript 单线程设计

JavaScript 的一个很重要的特性就是单线程,即同一个时间点只能够做一件事情。我们不禁会问,为什么不把 JavaScript 设计成多线程呢?

  ...


【Python】Python调试技巧

1 The Python Debugger

PDB,即The Python Debugger,是一个可对源代码进行交互调试的Python调试工具。

增加断点

增加的方法

# 需要引入pdb
import pdb

# 增加断点
pdb.set_trace()

运行结果

当添加pdb.set_trace()后,执行python test1.py,Python解释器会自动执行到 pdb.set_trace() 所在的这一行(下一行b = "bbb"未执行),并且进入pdb调试模式:

pdb 常用命令

命令 意义
c 继续执行程序
s或step 进入函数
exit 或 q 中止并退出
next 或 n 执行下一行
step 或 s 进入函数
p + 变量名 打印变量值
help 帮助
list 显示当前执行到的代码
  ...