标签墙

Design Patterns

什么是模式?

模式,即pattern。其实就是解决某一类问题的方法论。你把解决某类问题的方法总结归纳到理论高度,那就是模式。 Alexander给出的经典定义是:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。模式有不同的领域,建筑领域有建筑模式,软件设计领域也有设计模式。当一个领域逐渐成熟的时候,自然会出现很多模式。 为什么要用模式? 因为模式是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出一个优良的设计方案,达到事半功倍的效果。而且会得到解决问题的最佳办法。 常见的设计模....
More...

什么是设计模式?

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。 GoF的设计模式是第一次将设计模式提升到理论高度,并将之规范化,本书提出了23种基本设计模式,自此,在可复用面向对象软件的发展过程中,新的大量的设计模式不断出现。 一、设计模式和框架 现在,可复用面向对象软件系统现在一般划分为三大类:应用程序工具箱和框架Framework,我们平时开....
More...

设计模式:用Java动态代理实现AOP

目前整个开发社区对AOPAspectOrientedPrograming推崇备至,也涌现出大量支持AOP的优秀Framework,--Spring,JAC,JbossAOP等等。AOP似乎一时之间成了潮流。Java初学者不禁要发出感慨,OOP还没有学通呢,又来AOP。本文不是要在理论上具体阐述何为AOP,为何要进行AOP.要详细了解学习AOP可以到它老家http:aosd.net去瞧瞧。这里只是意图通过一个简单的例子向初学者展示一下如何来进行AOP.   为了简单起见,例子没有没有使用任何第三方的AOPFramework,而是利用Java语言本身自带的动态代理功能来实现AOP.    让我们先....
More...

面向对象的设计原则摘要

The principles of class design: SRPSingle Responsibility Principle单一职责原则: 一个类应该有且仅有一个职责。所谓一个类的职责是指引起该类变化的原因,如果一个类具有一个以上的职责,那么就会有多个不同的原因引起该类变化,其实就是耦合了多个互不相关的职责,就会降低这个类的内聚性。 OCPOpen - Colse Principle 开放-封闭原则:软件实体(类、模块、函数等等)应该是可以对模块进行快速扩展的,但是不可修改的。 遵循OCP原则的模块具有两个主要特征.他们是: 1. 对于扩展是开放的Open for extensi....
More...

追MM与Java的23种设计模式

1、FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说来四个鸡翅就行了。麦当劳和肯德基就是生产鸡翅的Factory   工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。    2、BUILDER-MM最爱听的就是我爱你这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种 语言都有一个按键,见到MM我只要按对应的键,它就....
More...

WEB互动的革命 - JSF框架中使用的设计模式介绍

设计模式可以帮助用户在更高层次上抽象细节,更好地理解体系结构。如果比较熟悉 GoF 设计模式和 JavaServer Faces JSF 框架,本文可以帮助您洞察 JSF 框架中使用的设计模式,深入理解其工作原理。   本文探讨了 JSF 框架中使用的设计模式。详细讨论的设计模式包括 Singleton、Model-View-Controller、Factory Method、State、Composite、Decorator、Strategy、Template Method 和 Observer 模式。   设计模式和 JavaServer Faces JSF 技术   首先简要地介绍一下模....
More...

模式痴迷

Contributing to Eclipse [Gamma and Beck]一书的封底上,对 Erich Gamma 的简介中这样写到:Erich Gamma作为经典著作《设计模式》一书的作者之一,与我们分享了他在软件设计的秩序与美上感受到的乐趣。如果你曾经构思或者遇到过通过使用模式得到的优秀设计,就能够体会其中深意。 同时,如果你曾经构思或者遇到过密布模式但是设计糟糕的代码(因为它不需要模式的灵活或者精巧),你就会懂得模式的可畏。 模式的滥用通常是由对模式的痴迷而造成的。所谓模式痴迷,就是指某人对模式过于痴迷,以至于无法不在代码中使用模式。陷入模式痴迷的程序员可能会费尽心力地在系统中使用....
More...

简单工厂(Simple Factory)模式的Java实现[00原创]

这几天正在学习设计模式,看完书,总得写点简单的实例吧:-所以呢,从今天开始认真写点简单的纯设计模式实现的Java代码,先比较浅显地体会一下设计模式的思想。以便以后在实际项目中正确地使用它。在这个例子中,ArtTracer的指责是根据客户的要求绘制各种各样的图形;Shape接口是提供一些常用的绘图操作,3个图形类分别实现了它;绘图异常时抛出BadShapeException。 1. 简单工厂实例UML类图 2. Java实现代码 packagecn.edu.ynu.sei.simpleFactory;***客户,要求绘图器codeArtTracercode实例绘制需要的图形**@autho....
More...

工厂方法(Factory Method)模式的Java实现[00原创]

这次的实例讲的是在一个果园中种有3种水果,勤劳的园丁负责照看它们,当有客户需要水果的时候就给他们。 1. 工厂方法实例类图 2. Java实现代码 packagecn.edu.ynu.sei.factoryMethod;***果园园丁接口**@author88250*@version1.0.0,2007-8-12*@uml.dependencysupplier=cn.edu.ynu.sei.factoryMethod.Fruit*publicinterfaceFruitGardener{***工厂方法**@return水果作物*publicabstractFruitfactory;***....
More...

抽象工厂(Abstract Factory)模式的Java实现[00原创]

本次实例继续上次 工厂方法 中的果园农场。这次,该农场公司引进塑料大棚技术,在大棚里种植热带Tropical水果和蔬菜。 1. 抽象工厂实例类图 2. Java实现代码 packagecn.edu.ynu.sei.abstractFactory;***水果接口*@author88250*@version1.0.0,2007-8-13*@seecn.edu.ynu.sei.factoryMethod.Fruit*publicinterfaceFruit{} packagecn.edu.ynu.sei.abstractFactory;***热带水果**@author88250*@vers....
More...

单例(Singleton)模式的Java实现[00原创]

本次实例介绍了单例设计模式里最常见的两个实例饿汉单例与懒汉单例。 1. 类图 2. Java实现代码 packagecn.edu.ynu.sei.singleton;***饿汉式的单例类**@author88250*@version1.0.0,2007-8-17*publicclassEagerSingleton{***单一实例**@uml.propertyname=instancereadOnly=true*privatestaticfinalEagerSingletoninstance=newEagerSingleton;***私有的默认构造器*privateEagerSingleto....
More...

多例(Multiton)模式的Java实现[00原创]

本次实例以掷骰子的例子展开。 1. 类图 2. Java实现代码 packagecn.edu.ynu.sei.multiton;***使用骰子的客户**@author88250*@version1.0.0,2007-8-19*publicclassClient{privatestaticDiedie1,die2;***程序入口点*@paramargs应该为codenullcode*publicstaticvoidmainString[]args{die1=Die.getInstance1;die2=Die.getInstance2;System.out.printlndie1.dice;....
More...

建造者(BUilder)模式的Java实现[00原创]

下面了例子来自《Java与模式》。假设有一个是用Java建造的电子杂志系统,定期地向用户的电子邮件信箱发送电子杂志。用户可以通过网页订阅,也可以通过网页结束订阅。当客户开始订阅时,系统发送一封电子邮件表示欢迎,当客户结束订阅时,系统发送一封电子邮件表示欢送。本例子就是这个系统负责发送欢迎和欢送邮件的模块。 1. 类图 2. Java实现代码 packagecn.edu.ynu.sei.builder;importjava.util.Date;importjava.util.Properties;importjavax.mail.Session;importjavax.mail.Trans....
More...

适配器(Adapter)模式的Java实现[00原创]

这里以一个指方为圆的例子来说明适配器模式的原理和简单应用,本例子来自《Java与模式》。 1. 类图 2. Java实现代码 packagecn.edu.ynu.sei.adapter;***球体接口br**@author88250*@version1.0.0,2007-8-28*publicinterfaceBallF{***计算表面积*@return*publicdoublecalculateArea;***计算体积*@return*publicdoublecalculateVolume;***返回半径值*@return*publicdoublegetRadius;***设置半径值*@....
More...

缺省适配器(Default Adapter)模式的Java实现[00原创]

这个模式的原理非常的简单,请看下面的例子。 1. 类图 2. Java实现代码 packagecn.edu.ynu.sei.defaultAdapter;***接口Abr*这个接口有5个方法,f1~f5**@author88250*@version1.0.0,2007-8-31*publicinterfaceInterfaceA{publicvoidf1;publicvoidf2;publicvoidf3;publicvoidf4;publicvoidf5;} packagecn.edu.ynu.sei.defaultAdapter;***缺省的适配器角色br*这个抽象类为code....
More...

合成(Composite)模式的Java实现[00原创]

1. 类图 2. Java实现代码 packagecn.edu.ynu.sei.composite;***抽象组件角色**@author88250*@version1.0.0,2007-9-4*publicinterfaceComponent{***返回自己的实例*@return*publicCompositegetComposite;***某个业务方法*publicvoidsampleOperation;} packagecn.edu.ynu.sei.composite;importjava.util.Enumeration;importjava.util.Vector;***树....
More...

JSF和MVC

1. JSF 和 MVC JSF 是几年前学过的在 Java 平台上改进 Web 开发技术的课程的结果。这一趋势开始于 JSP 技术,这一技术很好,只是很容易在 HTML(和类 HTML)页面中混合 Java 代码。下一次提高是 Model 1 架构,它让开发人员将大多数后端代码放入 JavaBeans 组件中,然后用 jsp:useBean 标签将 JavaBeans 组件导入 Web 页面。这对于简单的 Web 应用程序工作得很好,但是许多 Java 开发人员不喜欢 JSP 技术这种与 C++ 特性(比如静态包含)的协作。所以引入了 Model 2 架构。 本质上,Model 2 架构是用....
More...

使用 JSF 架構進行設計

使用 JSF 架構進行設計 探索 JavaServer Faces 框架中使用的設計模式 ....
More...

使用 MDSD 开发安全可靠的软件

作者 Andreas Kaltenbach 译者 丁亮 发布于 2010年6月12日 下午9时39分 我们何时可以认为 软件产品被真正地完成了呢?通常情况下,当我们不再为其提供后续支持,或者该产品已经被其它产品替代的时候,它的生命就终结了,几乎所有软件产品都会经历从开始到结束的演化过程。但存在了很长时间的大型企业级系统却会随 着时间的推移,向不可维护、变僵硬的趋势发展。这导致了软件开发的停滞,使得响应客户需求的时间变长。 介绍 在软件工程领域,经过几年的实践,模型驱动的软件开发(M....
More...

再识 Java 的 final 关键字

在 Java 中,我们一般用 final 关键字来定义类字段常量,防止类继承、方法覆写。但其实我们也应该尽可能地使用 final 关键字来修饰方法参数与局部变量。

因为这样做可以使代码更易读,能让阅读者清楚地知道该参数/变量是不会在被重赋值的,也可以让编译器更好地帮助我们优化生成的字节码。

More...