WWW.LOUGH.COM.CN

加入收藏 | 设为首页 | 联系站长
首页 | Java | C&C++ | 数据库 | 经验交流
论坛首页 | 综合区 | 贴图区 | 狐朋狗友 | 学习区 | 站务区
博客首页 | IT技术 | WebServices | Hibernate | Java设计模式 | Struts | AJAX | 数据库
首页 | 中华古籍 | 网络原创 | 随记

Java类库中的设计模式(二)

Java类库中的设计模式(二)

如果要问起近10年来在计算机软件工程领域所取得的重大成就,那么就不能不提到
设计模式(Design Pattern)了。 什么是模式呢?
1.2 一个简单的例子(3月12日)
    我们先来看一看一个设计模式的简单的例子:工厂方法模式(Factory Method)。

    这是一个使用的十分广泛的模式,到处都可以看到他的应用。工厂方法模式属于构
造型模式,用来完成对象的创建。它提供了一种方法,能够让程序不依赖于具体的创建
的对象。
    举个简单的例子:我需要一只笔,可以用来画画。因而,我定义了一个Pen类,它拥
有drawLine()方法来画直线,拥有drawCircle()方法来画圆。而事实上,世界上并没有
一只纯粹的笔,有的只是毛笔,铅笔等等。当然,所有的笔都是可以用来画线和画圆的
。这儿定义的Pen类只是一个抽象的超类,没有任何实现,具体的方法实现被延迟到子类
Pencil,Brush来实现。
    这在编程上就会引发一些问题,同样是笔,用毛笔和用铅笔在程序上没有任何的不
同,都只需要调用drawCircle()或者drawLine()方法即可。但是类的创建却是不一样的
,两条语句不同,并在编译时对不同的对象进行了静态的绑定,就是这么一点点的区别
,造成了程序的不可重用性。
    在这种情况下,设计模式的解决方法是引入了一个工厂类,由工厂来完成对象的创
建工作,具体对象的创建,取决于传递给工厂方法的参数。我们可以看看这个模式的类
图,以了解各个对象间的关系:
    通过向PenFactory的方法createPen()传递不同的参数,就可以得到不同的子类的引
用,例如:
    Pen aPen=aPenFactory.createPen(pencil);
    或者
    Pen aPen=aPenFactory.createPen(brush);
    然后,在后面的程序中,所有对aPen的操作都是完全一样的了。程序可以毫不加以
修改的运行在为Pencil类或者Brush类编写特定的实现中。
    实际上,这儿又一个很重要的概念需要加以说明一下。在设计模式中,有一个可以
说是统领全篇的设计原则,就是:针对接口编程,而不是针对实现编程。这儿的Pen类也
就只是一个接口,程序是按照Pen所定义的接口来编程的,如果你注意了上面的语句,你
会发现,工厂方法返回的是一个Pen类,而不是具体的子类的引用,尽管它实际上返回的
是一个子类的对象。不将变量申明为某个特定的具体类的实例对象,而是让它遵从抽象
类所定义的接口,这更有利于程序的重用性!所有创建型的模式提供了不同的方法,来
实现接口(或者说抽象类)和具体类之间的透明连接,确保了你的程序是正对接口编写
的,而不是针对实现编写的。



关于我们 | 站点地图 | 免责声明 | 联系我们 | ©2003-2007 Lough.com.cn 京ICP备06060948号