代码改变世界

随笔分类 -  Design Pattern & SA

Java静态类

2014-06-04 17:39 by youxin, 1622 阅读, 收藏, 编辑
摘要: 先要澄清和区别一些概念,“静态类”和“所有方法皆为静态方法的类”。严格说来,Java中的静态类,指的是“static class”这样修饰的类定义,语法上的要求,使得这样的类一定是内部类,换言之,“静态内部类”是对它的完整定义。静态内部类最大的好处在于可以隐藏自己(只让自己被所在外层的类用到),同时... 阅读全文

设计模式 Mixin (混入类)

2014-03-25 15:52 by youxin, 2403 阅读, 收藏, 编辑
摘要: 混入(mix-in)类代表类之间的另一种关系。在C++中,混入类的语法类似于多重继承,但是语义完全不同。混入类回答"这个类还可以做什么"这个问题,答案经常以"-able"结尾。通过混入类,可以向类中添加功能而不需要保证完全的"是一个"关系。您可以把它当作一种分享(share-with)关系。回到动物... 阅读全文

HMVC

2014-02-09 15:10 by youxin, 921 阅读, 收藏, 编辑
摘要: HMVC(Hierarchical-Model-View-Controller),也可以叫做 LayeredMVC。顾名思义,就是按等级划分的 MVC 模式,简单的解释就是把MVC又细分成了多个子 MVC,每个模块就分成一个 MVC。使用 HMVC 的好处就是可以降低各个功能模块之间的耦合性,提高代码复用性,使得每个功能都可以独立出来,每个模块都有自己的 MVC 结构,这就有点像ActiveX控件,每个控件都有自己的行为,控件之间互不影响。CodeIgniter结构示意 application |- controllers |- controller... 阅读全文

Page Controller页面控制器实现

2014-01-26 21:19 by youxin, 904 阅读, 收藏, 编辑
摘要: A Page Controller is one object or file declaration designed to handle the request for one logical web page or action.With a simple mapping between a page request (URL) and files, this is the default pattern for scripting solutions (PHP,ASP, JSP). A single file handles the request for a specific pag 阅读全文

转:前端控制器是邪恶的么?

2014-01-26 12:25 by youxin, 550 阅读, 收藏, 编辑
摘要: 作者:老王更新:鉴于我最初的行文方式有让人误解之嫌,所以我对措辞做了适当的删减,使之更简明扼要。所谓前端控制器(FrontController),是指一个请求运行的公共起点,并且在这里决定下一步执行什么。多数PHP框架里都实现了它。统一进行权限限制,会话管理等等公共操作,并且进而通过一个类似路由的装置,把请求委派给一个具体的命令对象来执行。实现方式上,前端控制器通常是以一个名为index.php的文件为载体,通过重写规则把请求都转发到这个文件上,如CakePHP在Apache上的设置: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d R 阅读全文

黑板架构模式及其常见实现方式

2014-01-23 10:02 by youxin, 3494 阅读, 收藏, 编辑
摘要: 黑板模式是一种常用的架构模式,应用中的多种不同数据处理逻辑相互影响和协同来完成数据分析处理。就好像多位不同的专家在同一黑板上交流思想,每个专家都可以获得别的专家写在黑板上的信息,同时也可以用自己的分析去更新黑板上的信息,从而影响其它专家。黑板模式的应用场景是要解决的任务可以分为多个子任务。解决方案如下图所示:优缺点:黑板模式的优点:可用于非确定性问题求解,启发式解决过程,可维护性,可重用不足:不能确保期望结果,效率低下,回退,不支持并行,共享空间的访问需要同步。在实际应用中常见的实现模式有:A 利用数据库 利用数据库充当黑板,不同的应用共享数据库中信息,并且可以更新数据信息。这也是最常见... 阅读全文

转:代码的坏味道之二十 :Data Class(纯稚的数据类)或POJO

2014-01-23 09:42 by youxin, 1377 阅读, 收藏, 编辑
摘要: 所谓Data Class是指:它们拥有一些值域(fields),以及用于访问(读写〕这些值域的函数,除此之外一无长物。这样的classes只是一种「不会说话的数据容器」,它们几乎一定被其他classes过份细琐地操控着。这些classes早期可能拥有public值域,果真如此你应该在别人注意到它们之前,立刻运用Encapsulate Field(封装值域,(就是将public 域变成private然后设置set和get)。将它们封装起来。如果这些classes内含容器类的值域(collection fields),你应该 检査它们是不是得到了恰当的封装;如果没有,就运用 Encapsulate 阅读全文

软件架构 "4+1" 视图模型

2014-01-10 23:28 by youxin, 3911 阅读, 收藏, 编辑
摘要: 1995年,Philippe Kruchten在《IEEE Software》上发表了题为《The 4+1 View Model of Architecture》的论文,引起了业界的极大关注。论文原文:http://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf翻译:http://www.ibm.com/developerworks/cn/rational/r-4p1-view/引言我们已经看到在许多文章和书籍中,作者欲使用单张视图来捕捉所有的系统架构要点。通过仔细地观察这些图例中的方框和箭头,不难发现作者努力地在单 阅读全文

软件体系结构经典问题——KWIC的分析和解决

2014-01-10 23:15 by youxin, 7424 阅读, 收藏, 编辑
摘要: KWIC作为一个早年间在ACM的Paper提出的一个问题,被全世界各个大学的软件设计课程奉为课堂讲义或者作业的经典。(From Wiki,FYI,D. L. Parnas uses a KWIC Index as an example on how to perform modular design in his paper "On the Criteria To Be Used in Decomposing Systems into Modules" - Available as ACM Classic Paper)问题陈述:KWIC(Key Word In Contex 阅读全文

软件架构的样式与框架

2014-01-10 22:33 by youxin, 848 阅读, 收藏, 编辑
摘要: 构架样式(模式,pattern,style)—是对各组件类型和运行控制/数据传送模式的描述。可以把构架样式看作是对构架的一组制约条件,即对各组件类型及其交互模式的限制条件,而这些制约条件就确定了一组或一系列能满足它们的构架。可以从四个方面理解构架样式: • 一组在系统运行时执行一定功能的组件类型。 • 能够表明在系统运行时组件的相互关系的拓扑结构。 • 一组语义约束条件的集合。 • 一组连接件的集合,这些连接件为组件之间的通信提供中介。构架样式是预先定义好的,稍加修改即可在给定环境下使用的“组块”,样式代表了一组已经做出并可重用的设计决策,而且这些决策构成了一个整体。软件架构样式的种类nWhe 阅读全文

《软件构架实现》2什么是软件构架

2014-01-10 22:09 by youxin, 481 阅读, 收藏, 编辑
摘要: 如果一个项目的系统构架(包括理论基础)尚未确定,就不应该进行此系统的全面开放,只有对构架做出明确清楚的表述,才能使之在整个开发和维护过程中加以充分利用。 -barry 软件架构的确定定义:某个软件或计算系统的软件构架是该系统中的一个或多个结构,他们由软件元素、这些元素的外部可见属性以及这些元素之间的关系组成。这里所说的某个元素的“外部可见属性”是指其他元素对该元素所做的假设,如它所提供的服务、性能特性、错误处理、共享资源的使用,等等。下面我们深入阐述一下该构架的含义。构架定义了软件元素。构架中包含了关于各元素应如何彼此相关的信息。也就是说,构架必须省略各元素中与其交互无关的... 阅读全文

《软件架构实践》读书笔记1构架商业周期

2014-01-10 17:27 by youxin, 1017 阅读, 收藏, 编辑
摘要: 部分和章节本书大致从构架商业周期的角度,分为4部分讲述了构架如何适合企业的需要。预想构架:第1~3章创建构架:第4~10章分析构架:第11~13章从一个系统刀多个系统:第14~19章第3,6,8,13,15,16和17章提供了案例分析,在各章的标题中已明确标出。第一章构架商业周期 系统的构架视图是抽象的,它不考虑实现、算法和数据表示的细节,集中研究“黑盒”元素的行为和交互。在设计具有所期望属性的系统时,开发软件构架是第一步。构架商业周期的概念:系统需求来自于企业目标,构架来自于系统需求,系统来自于构架。构架与设计师的经验、当时的技术水平有着密切的联系。 如果知道了系统需求,我们就可以为此系统构 阅读全文

设计模式之代理模式1

2013-07-15 17:53 by youxin, 1367 阅读, 收藏, 编辑
摘要: 某人要找对象,但是由于某些原因(如工作太忙)不能直接去找,于是委托一个中介机构去完成这一过程,如婚姻介绍所,在这里婚姻介绍所就是一个代理。所谓代理,就是一个人或一个机构代表另一个人或另一个机构采取行动。在我们所开发的软件系统中有时候也存在这样的情况,如调用一个远程的 方法,需要在本地设置一个代理,使得就像调用本地方法一样来使用远程的方法,这实际上也就是RMI,Web service等的实现原理。w模式动机在某些情况下,一个客户不想或者不能直接引用一个对象,此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以在客户端和目标对象之间起到中介的作用,并且可以通过代理对象去掉客户不能看到 阅读全文

一份很好的设计模式复习题

2013-07-15 17:28 by youxin, 240 阅读, 收藏, 编辑
摘要: 阅读全文

代理模式和装饰者模式

2013-07-15 17:25 by youxin, 659 阅读, 收藏, 编辑
摘要: 装饰模式:以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案;代理模式:给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用;装饰模式应该为所装饰的对象增强功能;代理模式对代理的对象施加控制,并不提供对象本身的增强功能二者的实现机制确实是一样的,可以看到他们的实例代码重复是很多的。但就语义上说,这两者的功能是相反的,模式的一个重要作用是简化其他程序员对你程序的理解,你在一个地方写装饰,大家就知道这是在增加功能,你写代理,大家就知道是在限制,虽然代码很可能相同,但如果你都叫他们装饰,别人会很迷惑的。代理模式和装饰者模式上在语法形式上几乎完全一样,那么它们的区别在哪里呢?装饰者 阅读全文

JDK里的设计模式

2013-07-15 16:54 by youxin, 332 阅读, 收藏, 编辑
摘要: 下面是JDK中有关23个经典设计模式的示例,在stakeoverflow也有相应的讨论:http://stackoverflow.com/questions/1673841/examples-of-gof-design-patternsStructural(结构模式)Adapter:把一个接口或是类变成另外一种。java.util.Arrays#asList()javax.swing.JTable(TableModel)java.io.InputStreamReader(InputStream)java.io.OutputStreamWriter(OutputStream)javax.xml. 阅读全文

设计模式之注册表模式

2013-07-15 14:10 by youxin, 1223 阅读, 收藏, 编辑
摘要: 如果你需要管理一群不同類型的物件,並希望在程式中這些物件在取得時都是單例,你可以使用Register of Singleton模式。在Java中若要實現Register of Singleton模式,可以使用Reflection機制來達成:import java.util.*;public class SingletonRegistry { private static Map registry = new HashMap(); private SingletonRegistry() {} public static Obj... 阅读全文

设计模式多线程方面之Thread-Per-Message 模式

2013-07-15 14:03 by youxin, 505 阅读, 收藏, 编辑
摘要: Thread-Per-Message模式是一个很简单但很常应用的模式,尤其是在GUI程式中,我们举个例子,当您设计一个文件编辑器时,您可能像这样注册一个开启档案的事件处理:menuOpenFile.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { openFile(); } });openFile()方法中主要是开启档案、一行一行读档案文字并设定文字至文字区域中,这样设计基本上没有什么问题,例如果您的文件内容很长,在读档必须花费一些时间时,您会发现在档案读取完毕前,您的视 阅读全文

UML类图关系大全

2013-07-15 10:50 by youxin, 282 阅读, 收藏, 编辑
摘要: 1、关联双向关联:C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法。在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类关系来说显得太抽象了,因为在设计阶段关联关系必须被映射为对象引用或指针。对象引用本身就是有向的,更适合表达我们所讨论的那种关系。所以这种关系在设计的时候比较少用到,关联一般都是有向的。使用ROSE 生成的代码是这样的:双向关联在代码的表现为双方都拥有对方的一个指针,当然也可以是引用或者是值。单向关联:C3->C4:表示相识关系,指C3知道C4,C3可以调用C4的公共属性和方法。没有生命期的依赖。一般是表 阅读全文

设计模式之多例模式

2013-07-15 10:36 by youxin, 1104 阅读, 收藏, 编辑
摘要: 所谓多例(Multiton Pattern)实际上就是单例模式的自然推广。作为对象的创建模式,多例模式或多例类有以下的特点:1、多例类可以有多个实例2、多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例。有上限多例模式一般类图:public class Die { private static Die die1 = new Die(); private static Die die2 = new Die(); /** * 私有构造函数保证 外界 无法直接将此类实例化 */ private Die()... 阅读全文