设计模式和系统结构

原文地址:http://www.jdon.com/46774

我们经常碰到一个问题:母亲和老婆掉到水里,你先救哪个?这个问题很难回答,我们从GOF设计模式与系统的角度来解剖这个问题。

GOF设计模式分三种类型:结构型、创建型和行为型,这三者类型其实对应着一个系统的三个阶段:设计阶段、创建阶段和运行阶段。

结构型模式指出如何设计出系统的结构,也就是一个系统的孕育,如同人的十月怀胎过程。

创建型模式指出系统起初如何被创建,也就是宇宙大爆炸前一刻,是系统从纸上落地,如同人的出生和养育,是从无到有的创建过程。

行为型模式是针对系统创建后进入自我运行阶段,这时再也无需创建者和设计者干预,如同人的成年结婚生子。也就是宇宙形成后的运行状态。

下面进入具体论证一下:
(1)结构型模式有Facade Proxy 桥模式 适配器Adapter和组合模式等等,这些模式共同点是针对代码结构如何设计,比如适配器模式是设计出一个适配类,能够将原来两个不匹配的类能够和谐统一,结构上可能有三个类,一般结构关系可以使用UML的类图表达;组合模式更是一种代码结构组合,将两个类组合在一起;这是一种组成结构的关系。

有结构就有关系,这也是关系数据库为什么能表达结构一样,设计表结构Schema实际是设计结构关系。

在建筑领域,土木结构的设计需要精确的设计阶段,建筑绘图就是一种结构或架构设计,它类似我们的结构型模式。

(2)创建型模式有工厂模式等,创建模式指出一个系统从设计图纸到落地运行如何创建的过程,正如一个建筑从图纸到落成需要经过施工创建过程一样。工厂模式指出专门有一个工厂类负责类的创建。

(3)行为型模式有Command 职责链 观察者等模式,这些模式都是针对系统进入自运行阶段时,系统内部如何运行的,比如Command模式是指从客户端发出请求打包成一个命令,由后端根据命令指派相应的模块响应处理。而职责链类似于过滤器,可以对请求命令进行一个个过滤拦截;观察者模式则是对运行时的状态改变的及时响应,发展为后来的Reactor模式或异步模式,因为异步编程是针对系统运行阶段的编程,编码时需要联想到系统运行的状态,这对于没有系统运行经验的程序员比较难,一般程序员比较适合顺序编程,顺序编程是一种结构编程,那么现在我们提供一些框架能让顺序编程的代码在运行时异步运行,这些都是在认识到系统不同阶段的边界后才有的发展。

因此,认识到一个系统有不同的逻辑边界对于我们认识世界更加重要,系统的结构设计、创建阶段和运行阶段是三个严格不同的逻辑世界,如同天上 人间和地狱三界不同一样。

有了系统边界认识,对于解答本文开始的问题就非常容易,母亲和老婆掉水救哪个?母亲是创建养育自己,而老婆是自己成年后进入自运行生活阶段的重点,母亲属于创建者,是创建阶段的重点,而老婆是运行阶段的重点,将这两个重点跨域边界比较显然是不符合逻辑的,提这个问题的人没有系统逻辑分界。

再比如:老板大还是公司规章制度大?老板确实是公司制度的制定者,实际属于创建阶段的老大,但是制度一旦颁布,进入运行阶段,老板自己也要服从制度管理,这时是制度大。

还有一个经济学问题,经济中重要两个角色,一个商品需要生产者和消费者,那么生产者重要还是消费者重要呢?过去计划经济时期,我们抓生产,结果经济还是没有抓上去,国营的一个个生产厂家都倒闭了,其实还是没有从系统阶段边界来认识这个问题,生产者属于经济系统创建阶段的老大,只有大量建立生产工厂,才能创建出各种商品;但是当经济进入自运行阶段后,供大于求,经济还是会崩溃,这时消费者就是老大了,只有消费才是驱动经济的关键,这也是凯恩斯等经济理论的核心基础,也就是为什么西方国家鼓励贷款提前消费的逻辑基础。

扯了这么多咸蛋,主要是想说明,其实设计模式不只是对于编程有作用,而且对于自己的三观也有帮助,因为开发者开发出一个软件系统,麻雀虽小,五脏俱全,其基本原理不亚于上帝创造世界。如果一个程序员只知道数据结构和算法,却对一个系统的设计 创建和运行等阶段没有基本逻辑认识,那么很显然会迷失在细节中失去方向。

从老子有无哲学观点看:数据结构算法和功能属于“有”,看得见摸得着;而系统阶段边界属于“无”,虽然无形无态,但是自然之道是无生有,我们不能因为首先学习了有形的知识,却忽视了无形的思想。

时间: 2024-10-22 23:31:45

设计模式和系统结构的相关文章

设计模式系列之工厂模式

设计模式一直是面向对象软件设计中最重要的一个领域,围绕设计模式讨论的话题也是数不胜数,其中GOF代表的23种设计模式更是经典之著.这个系列中我将会从自己的理解出发,阐述每种设计模式的思想,作用和利弊. 一. 设计模式概念 要讲解设计模式,必然先要说清楚两个问题, 1.什么是设计模式? 2.为什么需要设计模式? 对于设计模式,GOF是这么定义的:设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述,更特殊地,将之放到面向对象软件设计中来讲,设计模式可以被认为是实践中总结出的设计

【设计模式】使用设计模式来解决设计问题

选择对象 面向对象设计最困难的部分是将系统分解成对象集合.因为要考虑许多因素:封装.粒度.依赖关系.灵活性.性能.演化.复用等等,它们都影响着系统的分解,并且这些因素通常还是互相冲突的. 设计的许多对象来源于现实世界的分析模型.但是,设计结果所得到的类通常在现实世界中并不存在.设计模式帮你确定并不明显的抽象和描述这些抽象的对象.例如,描述过程或算法的对象现实中并不存在,但它们却是设计的关键部分.Strategy模式描述了怎样实现可互换的算法族.State模式将实体的每一个状态描述为一个对象.这些

java设计模式概述

1.1 什么是设计模式 Christopher Alexander说过:"每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样,你就能一次又一次地使用该方案而不必做重复劳动" 一般而言,一个模式有四个基本要素: 1. 模式名称(pattern name) 一个助记名,它用一两个词来描述模式的问题.解决方案和效果.模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果.找到恰当的模式名也是我们设计模式编目工作的难点之一. 2. 问题(problem)

从设计原则到设计模式

说明:这些资料仅仅是对设计模式的一些总结,没有设计模式的相关知识,很难看懂.即使看懂了这些,也仅说明理解了模式的基本思想.想要学好设计模式,还是建议好好看文后所列的参考书籍和推荐书籍. 这些总结有不少是根据自己的理解写成的,或许并不正确.如果您有不同的看法,请告知作者,谢谢! 欢迎传阅,但是请勿随意修改或Copy. 设计模式简介 每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心. -- Christopher Alexander 设计模式描述了软件设计过程中某一类常见

GOF设计模式 之 引言

1. 设计模式定义 模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心思想,这样就能直接利用此方案,不必做重复劳动: GOF中的设计模式是对用来在特定场景下解决一般设计问题的类和相互通信的对象的描述: 2. 设计模式分类 GOF中共包含了23种设计模式,根据其目的可以将模式分为创建型.结构型和行为型三种: (1) 创建型: 创建型模式与对象的创建有关:创建型类模式将对象的部分创建工作延迟到子类,而创建型对象模式则将它延迟到另一个对象中: 包含抽象工厂.生成器.工厂方法(类).

过滤器链

package com.zuhe; public interface Filter { void doFilter(); } package com.zuhe; public class FaceFilter implements Filter{ @Override public void doFilter() { System.out.println("this is FaceFilter"); } } package com.zuhe; public class HTMLFilte

程序设计模式之设计模式的重大意义

首先说说设计模式的用途: 在软件系统里面,系统的健壮性,可维护性,可扩展性 非常重要,也是一个成熟的系统必不可少的. 软件系统架构暂时没有涉及,但是无论怎么架构最后通过程序去实现,而程序并非简单功能实现. 我们是编程序的人别人叫我们程序员.个人觉得编程也是一种设计: 1.项目结构设计.功能模块划分: 2.单个类的设计,类成员变量设计,类方法设计. 一个系统由若干个类组成,好比一辆汽车由若干部件组成相互协调工作. 现在问题来了:如何将这些类更好地组合在一起?使每个功能模块代码变的清晰明了?在项目需

设计模式大全

Longronglin之设计模式: Christopher Alexander 说过:“每个模式描写叙述了一个在我们周围不断反复发生的问题,以及该问题的解决方式的核心.这样,你就能一次重新地使用该方案而不必做反复劳动”. 模式描写叙述为:在一定环境中解决某一问题的方案,包含三个基本元素--问题,解决方式和环境. 阅读类图和对象图请先学习UML 创建模式 结构模式 行为模式 创建模式:对类的实例化过程的抽象.一些系统在创建对象时,须要动态地决定如何创建对象,创建哪些对象,以及如何组合和表示这些对象

设计模式学习第一天:23种设计模式(全)

C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些模式,但或许您并不知道自己所使用的这种解决方案是一种已经被总结归纳的模式. 工厂.策略.桥接.模板方法.代理等等23种Gof经典模式是属于设计模式,设计模式的粒度相对较小,基本上用于提高模块内部的可扩展性和可维护性需求 三层.MVC.IoC/DI等属于体系结构模式,粒度比设计模式大,它是从项目的整体