2008-05-06

Builder模式

关键字: 设计模式
1.概念 《设计模式》一书中对于建造者模式是这样定义的:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。其实建造者模式就是用来创建复合对象,并把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。有点拗口,首先我们来看看它的UML图:  Builder:为创建一个Product对象的各个部件制定抽象接口。 ConcreteBuilder:具体的建造者,它负责真正的生产。 Director:导演, 建造的执行者,它负责发布命令。 Product:最终消费的产品。 2、例子 下面我们举个例子来加深我们对Builder模式的理解。 ...
2008-04-20

设计模式-抽象工厂模式

关键字: 设计模式
1.概念 《设计模式》一书中对于抽象工厂模式是这样定义的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 看过定义后可能有点不知所云,很难很抽象,下面我们举个例子看看吧,延续上篇blog设计模式-工厂方法的例子! 2、示例 // 产品 Plant接口 public interface Plant { }//标志接口 //具体产品PlantA,PlantB public class PlantA implements Plant {  public PlantA () {   System.out.println ...
2008-03-31

设计模式-工厂方法

关键字: 设计模式
1.概念 《设计模式》一书中对于工厂方法模式是这样定义的:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 看过定义后可能有点费解,下面我们举个例子看看吧! 2.简单工厂模式 先简单说下简单工厂模式,简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。它又称为静态工厂方法模式。缺点是违反了开闭原则。 //生产产品的工厂类 public class ProductFactory{    public static Product generateProduct(int which){ //这 ...
2008-01-30

设计模式-单例模式(续)

关键字: 设计模式
在《设计模式-单例模式》这篇文章中对单例模式做了一个简单的介绍,接下来本文主要讨论的是多例模式、多线程、双重检查以及“不完全”单例类。 一、多例模式 所谓多例模式,实际上就是单例模式之自然推广,单例类一般情况下只可以有一个实例,但单例类也可以推广到允许有限个实例,这种模式就是多例模式,它的主要特点:多例类可以有多个实例。 二、多线程 下面这段代码使用了线程同步,可以说是线程安全的,一个类不会出现多个实例。如果没有synchronized同步,则在单线程中是安全的,但是到多线程中就可能会出现多个实例。 public class LazySingleton { ...
2008-01-25

设计模式-单例模式

关键字: 设计模式
1.概念 《设计模式》一书中对于Singleton模式是这样定义的:保证一个类有且仅有一个实例,并且提供了一个全局的访问点。 2.动机 在很多操作中,比如建立目录,打印机,数据库连接都需要这样的单线程操作,如果一个类有多个实例存在的话,就可能带来并发的问题。 这就提出了一个问题:一般每个类中的构造函数都是public,如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?这就是单例模式需要解决的问题。 为了防止单态模式的类被多次实例化,应将类的构造器设成private或protected,这样就保证了只能通过静态方法获得类实例。如果构造器设置为private,那么就不能单例的子类 ...
2008-01-21

设计模式-面向对象概念

关键字: 设计模式
早就听说GOF的《设计模式》是OOP(面向对象程序设计)程序员都必备的参考书之一,它是所有面向对象语言(C++ Java C#)的基础。我接触Java也有段时间了,可是也一直停留在语言层次,对Java中接口或抽象类理解并不是太深。在看前辈们写的代码的时候,感觉差距还是不小,他们写的代码里处处体现设计模式的思想。 一、什么是抽象类 《设计模式》中对于抽象类是这样定义的:抽象类的这样目的是为它的子类定义公共接口,不能被实例化。 public abstract void noAction(); 此方法只有申明而没有方法体,并且void前面出现abstract关键字,我们将此方法称为抽象方法,并且 ...
2007-10-02

(转)Java设计模式

关键字: 设计模式
创建模式 1.工厂方法模式(Factory Method) 多态性工厂模式,创建一个产品的工厂接口,把实际的工作转移到具体的子类。 public class TestFactoryMethod { public static void main(String[] args) { AnimalFactory af=new DogFactory(); Animal1 a=af.getAnimal(); } } abstract class Animal1{} class Dog1 extends Animal1{} class Cat1 extends Animal1{} ...
ldjsyl
搜索本博客
我的相册
C64aa706-46c3-3a75-8cd1-1d72023decc4-thumb
新建 BMP 图像
共 12 张
存档
最新评论