自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 收藏
  • 关注

原创 工厂方法模式示例

//工厂方法模式示例:package innerclasses;import static net.mindview.util.Print.*;interface Service{ void method1(); void method2();}interface ServiceFactory{ Service ...

2009-11-27 14:34:27 165

内部类总结

一、方法及作用域内的内部类:1.在一个方法内定义的类2.在一个方法内部的作用域内定义的类3.实现了一个接口的一个匿名类4.扩展了一个没有默认构造器的类的匿名类5.一个实现域初始化的匿名类6.一个使用实例初始化完成构造的匿名类(匿名内部类不能拥有构造器) 二、匿名内部类如果要用到外部类定义的对象,接受此参数的方法中对应的参数列表应该被声明为final型的。但是,如果不是直接在匿名内部类中使用...

2009-11-27 14:28:13 141

原创 finalize()方法终结条件验证 示例代码

package Initialization;class Tank{ int howFull = 0; Tank() { this(0);} Tank(int fullness){ howFull = fullness; } void sayHowFull(){ if(howFull == 0) System.out.println("Tank i...

2009-09-20 09:23:07 246

原创 Windows下查看系统端口使用情况的命令

转载至:http://wangding263.iteye.com/blog/297663 在windows命令行窗口下执行: C:\>netstat -aon|findstr "4444" TCP    127.0.0.1:4444         0.0.0.0:0              LISTENING       2434 由上面得知,端口被进程号为2434的进程占用,继续执行下...

2009-08-20 15:00:12 209

原创 Flyweight(享元)模式

Flyweight模式可实现客户代码之间的对象共享,创建共享对象的职责,这一点普通对象是不具备的。一般的对象不必关心共享职责,任何时刻最多只能有一个客户代码引用它,其他时刻可以是其他客户代码引用。如果多个客户代码引用同一个对象,那么当某个客户代码修改了该对象的状态时,该对象是不会通知其他客户代码的。然而,有时候,我们需要让多个客户代码共享访问同一个对象。    当我们必须管理成千上万个小型对...

2009-05-15 21:24:27 144

原创 Builder(生成器)模式

  当构造某对象时,也许无法保证总能事先获知对象的所有所需信息。尤其是,有时候目标对象的构造器的参数只能逐步获取,我们希望能够一步一步地构造目标对象,常见情况比如解析器和用户接口。或者,当对类的重点难以很好把握并且类的构造过程相当复杂时,你也许希望简化类的规模,这时就可以使用Builder模式。  Builder模式的意图是把构造对象实例的代码逻辑移到要实例化的类的外部。 1. 常...

2009-05-15 21:22:54 197

原创 责任链(Chain of Responsibility)模式

    面向对象开发人员通常希望明确和减少对象间的责任,从而降低对象之间的耦合程序.这样我们的系统更加容易修改,同时也可降低产生缺陷的风险。从某种程序上说,Java语言本身能够帮助降低对象间的耦合度。客户端只能访问对象的可见接口,而无需关心对象的实现细节。借助于这种组织方式,客户端代码只需了解哪些类有哪些方法可调用即可;除此之外,客户端代码与被使用的代码无任何关联。如果我们将若干对象按照某...

2009-05-15 21:18:30 251

原创 Prototype(原型)模式

Prototype模式不通过实例化类来创建一个新的未初始化的实例,而是通过复制一个现有的对象来生成新的对象。  1.作为工厂的原型:   假定Oozinoz公司的应用系统通过使用抽象工厂模式为不同的应用场合提供不同的图形用户界面。如下图列出了所用到的用户接口工厂:三个抽象工厂(或称工具包)可以产生三种不同的“外观和感觉”的用户界面    Oozinoz公司的应用程序可以...

2009-05-15 21:17:59 153

原创 Proxy(代理)模式二

2.  重新思考图像代理:    现在需要思考设计模式是否真的能够帮助我们。之前我们费尽心血实现了一个设计模式,而现在又要考虑将它拆掉。现实的开发中会遇到更多这样的情况,实际上这是很自然的。经过他人的评审之后,设计人员可以在发布之前重新构思自己的设计,并修改其中有问题的部分。在实际过程中,设计模式可以帮助我们设计和调试应用程序,另外也方便了他人对我们的设计进行讨论。就Oozinoz公司的Ima...

2009-05-15 21:16:07 229

原创 Proxy(代理)模式

Proxy(代理)模式         普通对象所需要完成的任务是通过公共接口为外界提供自己所承诺的服务。然而,有时候合法的对象可能会因为各种原因而无法完成自己常规的任务。尤其是当对象需要很长时间才能载入内存、对象正运行在另一台计算机上或者需要获取对象消息的时候,这种情况就会频繁出现。在这种情况下,我们可以使用一个代理对象,由它来承担客户所期待的责任,并将请求转发给其背后的目标对象。 ...

2009-05-15 21:14:59 136

原创 Mediator(中介者)模式

  通常,面向对象的软件开发要求尽可能细致地分配责任,从而使每个对象都能够独立完成自己的任务。Observer模式通过尽可能缩小一个对象应对其他对象承担的责任来支持这种责任分配。而Singleton模式将责任集中于其他对象都可以访问和利用的某个特定对象中。与Singleton模式类似的是,Mediator模式也对责任进行了集中,不过这种模式只是对某个特定对象集合的责任进行集中,而不是对整个系统的其...

2009-05-15 21:14:42 143

原创 Observer(观察者)模式一

Observer模式的宗旨是在多个对象之间定义一对多的关系,以便当一个对象状态改变的时候,其他所有依赖于这个对象的对象都能够得到通知,并被自动更新。1.经典范例:   借助于Observer模式,当某个对象发生变化时,关注该对象的其他对象可以被通知。这种模式的一个最常见的例子是图形用户界面。每当图形界面的用户单击按钮或者调整滑动条的时候,该应用程序中许多对象都会对此做出反应。Java开发者...

2009-05-15 21:13:34 168

原创 责任型模式

    对象的责任类似于Oozinoz公司呼叫中心服务代表的责任。当我们拨打Oozinoz公司的服务电话订购焰火制品的时候,接听电话的人员就是公司的代表---即代理。他所要执行的任务都是既定的,即将客户发起的任务委托给其他系统或人员去执行。有时候,服务代表会将用户的请求提交给唯一的核心机关,由它来调解纠纷,或者把问题上交到责任链中进行解决。    与呼叫中心的服务代表一样,普通对象也拥有独立动...

2009-05-15 21:12:15 217

原创 Bridge(桥接模式)

    Bridge模式着重考虑如何实现对具体实现的抽象(abstraction)."抽象"一词用来指代依赖一系列抽象方法的类。这些抽象方法可以有多种不同的实现。这些抽象方法可以有多种不同的实现。    实现对具体实现的抽象的一般做法是创建一个类层次结构:顶层的抽象类定义出各种抽象方法;每个子类给出这些抽象方法的不同实现。当我们出于其他原因需要对该类层次结构进行继承的时候,这种做法就显得不足了...

2009-05-15 21:11:55 900

原创 Facade外观模式

1.Facade模式就是一个功能介于包和完整应用程序之间的类,可提供包或子系统中类的简化功能。Facade模式的目的在于提供一个接口,使子系统更加容易使用。2.外观类、工具类和示例类:   外观类的方法可能都是静态方法,这种情况下,外观类在UML中被称作工具类。示例类就是演示如何使用类或子系统的例子。外观类所能提供的诸多使得之处,示例类也能提供。3.示例类与外观类的几点区别:...

2009-05-15 21:11:22 150

原创 Composite(组合)模式

       Composite模式涉及的是一组对象,其中有些对象可能含有其他的对象;因此,有些对象可能代表一个对象群组,而其他的则是单个对象,即叶子。利用Composite模式建模包含两个重要的建模概念。其中一个重要的思想是所设计的群组即能包含单个个体,还要能包含其他群组(一个常见的错误是所设计的群组只能包含叶子)。另一个重要的概念是要定义出单个对象和对象组合的公共特性。结合这两个概念,我们可以...

2009-05-15 21:07:43 448

原创 Memento(备忘录)模式

有时候,我们需要创建的对象曾经在系统中出现过。这种情形可能出现在当我们希望支持用户执行撤销操作回退到以前某个状态的时候,以及恢复到老版本状态或者支持用户继续执行之前挂起的任务的时候。    Memento模式的意图在于为对象提供状态存储和状态恢复功能。 1.经典范例:使用特备忘录实现撤销操作:  讲抽象工厂模式的时候,介绍了一个图形化应用程序,允许用户使用材料进行操作建模试验。假设...

2009-05-15 21:07:15 187

原创 操作型模式简介

   我们只有弄清楚诸如算法、多态性、方法和操作等术语的不同意义,才能够准确地理解众多设计模式中所涉及的重要概念。特别是State模式、Strategy模式以及Interpreter模式,都需要跨越几个类的方法来实现一个操作;但是,只有当我们对方法和操作的含义达成了共识,这样的表述才具有意义。 1   操作和方法:    在有关类的众多术语中,尤其需要注意区分操作和方法这两个概念。UM...

2009-05-15 21:01:58 787

原创 Template Method(模板方法)模式

   普通方法的方法体定义了一个语句序列。在这个语句序列中通常会出现对当前对象方法的调用,以及对其他对象方法的调用。从这种意义上说,普通的方法就是一个“模板”,它给出了计算机执行的指令序列。不过Template Method模式所涉及到的则是一个更为特殊的模板类型。     在编写一个方法的时候,考虑到算法的某些步骤可能会有不同的实现方法,我们可能会首先定义出算法的框架。这样,在定义方法的时候...

2009-05-15 21:01:38 218

原创 Template Method二

   Template Method模式类似于Adapter模式,原因在于两种模式都允许开发者简化和指定其他开发者程序代码完成设计的方式。在Adapter模式中,一个开发者也许指定设计所需的对象的接口。第二个开发者会创建一个对象,提供设计所期望的接口,但是使用具有其他接口的已有类的服务。在Template Method模式中,一个开发者也许提供一个通用算法,而第二个开发者提供该算法的关键步骤。...

2009-05-15 20:59:54 96

原创 State(状态)模式

对象的状态是其属性当前值的一个组合.可以通过调用set-方法或者给对象字段分配值等方式来改变对象的改变。当我们调用对象的某个方法的时候,这个对象的状态也可能发生改变。对象通常在执行其方法时更改自身状态。    在某些情况下,我们使用单词状态(state)来代表某对象的单个可变化属性。比如,我们也许说某机器的状态表述成开机(up)或者关机(down)。在这种情况下,对象状态中可变化部分也许是...

2009-05-15 20:58:14 1800

原创 Strategy(策略)模式

  算法是定义好的过程,它能够根据一组输入产生一个输出.而策略是一个计划,它也涉及如何从一组输入获得一组输出.在通常情况下,与算法相比,策略是能够提供更大范围的可选方案.因而,策略通常代表一组或者一簇可以相互替换的方案.   当计算机程序存在多种策略时,程序代码会比较复杂.当有多个策略可用时,与策略相关的程序逻辑必须选择其中一个策略来执行,这时策略选择的程序代码可能变得很复杂,同时策略使用的逻...

2009-05-15 20:55:33 1017

原创 Strategy(策略)模式二

2.重构为Strategy模式:  上节中给出的getRecommend()方法存在这样几个问题:首先,它太长了,需要我们加注释以解释不同的部分。另外,getRecommend()方法先是选择一个策略,然后执行这个策略;这是两个不同的并且可以分离的功能。我们可使用Stragegy模式来整理这段代码。为了做到这点,需要完成以下几点:(1)创建一个接口来定义策略操作;(2)分别在不同的...

2009-05-15 20:54:31 250

原创 Command(命令)模式

  让方法运行的最常见方式调用之。但是在很多情况下,我们不能控制和提供方法执行的时机或者上下文。 在这些情况下,可以把方法封装在对象中。通过在对象中存储调用方法所需的信息,就可以让客户端或者服务决定何时调用这个方法。  Commmand模式的意图是把请求封装在对象中。 1.经典范例:菜单命令  支持菜单的工具集通常都会用到Command模式。每个菜单项都需要配置一个对象,当用户单击...

2009-05-15 20:52:27 530

原创 Command模式二

   假设现有一个新需求要求我们统计方法的执行时间.假设已有一个Command接口,其主要代码如下所示:  Java代码 public abstract void execute(); 还有一个Command Timer类:Java代码 package com.oozinoz.utility;impor...

2009-05-15 20:50:58 144

原创 Interpreter(解释器)模式

          与Command模式一样,Interpreter模式也会产生一个可执行的对象.差别在于Interpreter模式会创建一个类层次,其中每个类会实现或者解释一个公共操作,这个操作与类的名称相匹配.在这方面,Interpreter模式类似于State模式和Strategy模式.在Interpreter模式、State模式以及Strategy模式中,一个公共操作遍布类集合,每个类...

2009-05-15 20:47:50 504

原创 扩展型模式介绍

  本章介绍面向对象程序设计的一些基本原则,借助这些原则,你可以进一步更加客观地评估自己的代码。  除了扩展代码库的常见技术之外,也许希望使用设计模式来添加新功能。在了解常规设计中面向对象的主要原则之后,本章将讨论以前包含扩展功能的设计模式,并在本部分介绍其他面向扩展的设计模式。 1.面向对象设计原则:  有很多讨论设计原则的论坛,其中最著名的一个论坛是Portland Patte...

2009-05-15 20:36:27 500

原创 Decorator(装饰器)模式

Decorator(装饰器)模式       Decorator模式的意图是在运行时组合操作的新变化. 1.经典范例:流和输出器:  Java类库中输入输出流的设计是应用Decorator模式的典型例子.流是一系列比特或字符的集合,比如文档中出现的字符集合.在Java中,Writer类是支持流的一个方法.有些输出器(writer)类的构造器的参数可以是其...

2009-05-15 20:34:01 124

原创 Iterator(迭代器)模式

  当通过添加新类型的集合来扩展代码库时,你也许发现有必要通过增加迭代器进一步扩展你的扩展类.本章讨论对组合结构进行迭代的特殊情况.除了对新类型的集合进行迭代之外,在多线程环境下进行迭代会导致一些值得关注的问题.迭代看起来简单,但是其中还有很多需要探讨的地方,并不成熟.   Iterator模式的意图在于为开发人员提供一种顺序访问集合元素的方法. 1.常规迭代:  Java对迭...

2009-05-15 20:28:43 119

原创 Visitor(访问者)模式

   如何扩展一个现有的类层次结构来实现新的需求呢?一般的做法是添加新的方法以满足新需求.但是,有时候新需求可能与现有对象模型根本就不兼容.另外,有可能你无权看到已有代码.在这些情况下,无法修改类层次结构内的代码,我们要想实现对类层次结构行为的扩展,那几乎是不可能的.但是,如果开发人员能在设计类层次结构的过程中应用Visitor模式,这将大大夺方便其他开发人员在以后的软件开发过程中扩展该类层次结构...

2009-05-15 20:24:57 1248

原创 Iterator(迭代器)模式二

   CompositeIterator类的next()方法需要枚举属于某组合对象的每个子对象的节点.我们需要子类来实现iterator(:Set)方法,以便于next()代码可以使用.图2给出了这些类和接口的关系.    为更新ProcessComponent类层次结构,以便于枚举,我们需要提供一个iterator()方法:public ComponentIterat...

2009-05-15 10:18:55 130

原创 Iterator(迭代器)模式

3.对组合结构进行迭代:  很容易设计算法来遍历组合结构,访问其中每个成员,并执行某种操作.创建迭代器也许比创建递归算法更加困难.难点在于如何返回对其他程序的控制权、记录某种标签,以便于迭代器能够返回继续执行。组合结构提供一个很好的迭代器范例,开发起来有一定难度。  有人可能会认为在建模时每个问题域的组合结构都需要一个新的迭代器类。实际上,我们可以设计一个可复用的组合迭代器;在需要时,稍微...

2009-05-14 23:02:51 114

原创 Abstract Factory(抽象工厂)模式

    有时候,我们希望为客户代码提供实例化类的同时能够控制应该对哪个类进行实例化。在这些情况下,我们可以应用Factory Method模式,并提供一个方法来利用某种外部因素确定应该实例化哪个类。有时候,这些用于控制对哪个类进行实例化的外部因素往往涉及多个类,其本身就是一个研究主题。     Abstract Factory模式的意图在于创建一系列相关或相互依赖的对象。 1. 经...

2009-05-04 16:21:34 187

原创 构造型模式介绍

多种设计模式能够解决普通构造器不能解决的问题。1.普通构造的挑战:  突破题1:请列出Java构造器关于使用和行为的4条规则。  答:(1)如果开发者没有为类提供构造器,那么Java将会为该类提供默认的构造器.       (2)构造器的名字必须与类名相同。因而,构造器名字通常与其他方法名字不同,它的名字是以大写字母开头。这一点看起来有些怪异。       (3)构造器可以使用...

2009-04-30 20:08:29 257

原创 Proxy代理模式三

4. 动态代理:     Oozinoz公司的工程师们偶尔会面临性能方面的问题。他们喜欢构建不会对设计产生较大变动的代码。     Java的一个特性可支持此方面考虑:动态代理。借助于动态代理,可以使用代理对象来包装其他对象,使用代理对象截获对被包装对象的调用请求,然后代理继续把这些请求转发给被包装对象。在执行被截获的调用之前或者之后,我们可以编写相关的加强代码。对动态代理加以限制可以防止...

2009-04-26 21:43:24 110

原创 Mediator(中介者)模式二

1. 利用Mediator模式管理关系完整性:        通过应用面向对象的建模方式,我们很容易将现实世界中的对象建模为Java对象。然而,Java对象模型在反映现实世界方面仍然存在至少两个基本的缺陷:第一,现实世界中的对象可以随时间而变化,但是Java并没有为此提供支持。例如,赋值语句仅是简单地将变量以前的数值抹掉,而不能像人类那样可以记住以前的数值。第二,在现实世界中,关系和对象一...

2009-04-24 10:27:14 167

原创 Observer(观察者)模式二

上接:Observer(观察者)模式一:   public void stateChanged(ChangeEvent e) { double val = slider.getValue(); double max = slider.getMaximum(); double min = slider.getMinimum(); tPeak = (val - min)/(max ...

2009-04-20 19:43:28 165

原创 含有环的Composite模式

      前面提到的非树状Composite模式纯属建模失误,它把machine同时标识为plant和bay的一部分。对于物理对象而言,你可能希望不允许把一个对象包含在多个对象中。然而,问题域可能会包含非物理的对象,在这种情况下,环状的包含关系是有意义的。在对加工流程进行建模的时候,这种情况会经常出现。比如说在焰火弹的生产过程中,如果检查不合格则有可能返工。                 ...

2009-04-17 19:38:04 120

原创 Adapter(适配器)模式

1. Adapter模式的宗旨就是:保留现在类所提供的服务,向客户提供接口,以满足客户的期望。2. 当客户在接口中定义了他期望的行为时,我们就可以应用适配器模式,提供一个实现该接口的类,并且扩展已有的类。已有的类中有客户需要的信息。这时我们使用的是“类适配器”,即通过创建现有能提供客户需求的类的子类,并且该子类实现客户期望的接口的方式来实现适配。    例如:客户需要一个接口RocketS...

2009-04-14 20:27:56 147

原创 第2章 接口型模式介绍

1. 抽象类和接口之间的区别:一个类可以实现任意多个接口,但它最多只能继承一个抽象类。一个抽象类可以包含有若干个非抽象方法。但在接口中,无论一个方法是否被显式地声明为抽象的,接口中的方法都是抽象方法。抽象类可以声明声明和使用字段,而接口却不行,尽管接口可以创建static final常量。抽象类方法的可见性可以是public、protected、private或者修饰符(表示包内...

2009-04-14 16:26:06 100

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除