设计模式学习概述

      接触设计模式已经有几年了,虽然23中模式的名字都能说的上来,可总感觉自己还是没有摸着设计模式的门槛。最近在Spring源码,发现自己对设计模式的理解太过机械化了。于是就重温了一遍,并写下了学习笔记。

      在软件开发过程中,总会存在两种角色,一个是API的提供者(或者说类库的开发者),一个是API的使用者(类库的使用者或者叫客户);提供者和使用者通常不是一个人。现实世界中需求总是在不断变化的,那么不管是提供者还是使用者,都有需该自己代码的需求。问题的关键是客户的程序依赖于提供者的API接口,他希望提供者的接口最好一成不变;而提供者在修改自己的代码是如何对客户的代码造成的影响最小呢,这就是设计模式存在的价值。设计模式是针对解决软件开发中变化点,找的有效的封装方案,从而为客户提供一个较稳定的接口。

      要深入理解设计模式必须从两个不同的角度来理解,其一是从开发人员的角度,分为提供者和使用者;其二是从程序代码的角度,分为调用代码和被调用代码。

     程序中的变化点,最直接的表现为if - else 或者switch语句。if -else或者switch语句本身不是没有问题。

如果一个if -else或者switch在你的程序中仅仅出现过一次,那这就是最好,也是最有效率的解决方案;如果相同的if -else或者switch语句在你的程序中出现了多次,或者提供者和使用者之间都需要用到,那么你就需要考虑设计模式了。

术语:

     客户或者客户程序: 在设计模式中,客户的含义不是指人,而是程序,是代码。具体的说,它包含两层意思:其一,我的程序使用了Spring的DAO模块,那么我的代码就是DAO的客户;其二,我编写了一个class A,并在我的另一个类class B中使用了A, 那么B就是A的客户。设计模式使用了客户这个概念来表达代码直接的相互关系,而且整个设计模式也都是围绕着如何处理好客户之间的关系展开的。不能正确理解客户这个概念,就无法正确理解设计模式。

原文地址:https://www.cnblogs.com/rockythd/p/3436427.html