分享
 
 
 

Design Pattern Introduction

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Design Pattern

Introduction

Design Pattern(设计模式)的目标是,把共通问题中的不变部分和变化部分分离出来。不变的部分,就构成了Design Pattern(设计模式)。这一点和Framework(框架)有些象。

下面举个Design Pattern的例子。

假设有一个Java类,Record。

public class Record{

public int field1;

public long field2;

public double filed3;

};

现在有一个Record类对象的数组,Record[] records;

要求如下,对records数组按照field1的大小排序。

做一个sort函数,如下:

void sort(Record[] records){

for(int i =….){

for(int j=….){

if(records[i].field1 > records[j].field1)

// swap records[i] and records[j]

}

}

}

现在问题变化,需要对records数组按照field2的大小排序。sort函数,如下:

void sort(Record[] records){

for(int i =….){

for(int j=….){

if(records[i].field2 > records[j].field2)

// swap records[i] and records[j]

}

}

}

同样,还有第三种要求,按照filed3的大小排序,按照filed1和field2的大小排序。

可以看得出来,这些问题的变化的部分,就是判断条件的变化(黑体的if条件判断语句)。

所以可以这样设计,引入一个Comparator接口。

public interface Comparator(){

public boolean greaterThan(Record a, Record b);

};

sort函数如下:

void sort(Record[] records, Comparator compare){

for(int i =….){

for(int j=….){

if(compare.greaterThen(records[i], records[j]))

// swap records[i] and records[j]

}

}

}

这样,对应第一个问题,对records数组按照field1的大小排序。

做一个实现Comparator接口的类,CompareByField1.

public class CompareByField1 implements Comparator{

public boolean greaterThan(Record a, Record b){

if(a.filed1 > b.filed1){

return ture;

}

return false;

}

}

调用sort函数, sort(records, new CompareByField1());

这样,对应第一个问题,对records数组按照field2的大小排序。

做一个实现Comparator接口的类,CompareByField2.

public class CompareByField2 implements Comparator{

public boolean greaterThan(Record a, Record b){

if(a.filed2 > b.filed2){

return ture;

}

return false;

}

}

调用sort函数, sort(records, new CompareByField2());

在JAVA JDK的接口设计中,有很多Design Pattern(设计模式)思想的优良体现。

例如,关于以上的排序问题,可以参照 java.util.Collections 类的sort 方法,和java.util.Comparator接口。

还有,AWT和Swing包里的事件机制(ActionListener),后面会提到。

Event Mechanics

事件机制

面向对象编程中的事件机制,都是采用Observer Pattern实现的。比如前面提到的,Java的AWT和Swing包里的事件机制(ActionListener)。C#里面的delegate。其工作原理也可以用Publisher/Subscriber Pattern来解释。比如我们订阅手机短信,加入邮件列表,等等。每隔一定时间,Publisher(发布者)会把消息(事件)通知我们。但这种”推”来的消息,对Subscriber(订阅者)的意义不大,而且有可能影响重要消息的处理,比如垃圾邮件的问题。其实,对于某个人的垃圾邮件,对于另外的人,可能是有用的信息。问题是这种推的方式,不加区别地把相同的信息广播(或组播,比如主题订阅的情况)给所有的Subscriber(订阅者)。

那么,”拉”的方式又如何呢?我想,可以分为三个层次。

1.Internet Agent

这是最高的层次,使用一个Agent(智能代理),具有网络蜘蛛的基本功能,按照用户的定义,自动地在网上搜索有意义的信息。这个层次涉及到人工智能,自然语言语义分析。

2.实时反应系统。微软称之为神经网络。

这种系统能够实现全球范围的实时信息共享。在这种系统中,每个Subscriber(订阅者)都只收到重要的变化的信息。比如,一个炒股的人,只关心某几支股票的行情,当这几支股票的股价变化超过一定的范围,系统就会及时地通知用户。

3.个性化定制

MY MSN是个很好的例子。个性化定制,对一些商业网站极其重要,对于不同的顾客,提供不同的界面和服务。

提到网站的个性化定制,Apache的Cocoon Project 非常引人注目。Cocoon是构成IBM电子商务解决方案的重要部分。Cocoon也被包含在JBuilder 企业版里面。

Cocoon的构建技术: J2EE, XML, XSLT, XSP。

Cocoon以一种类似生产线的管道方式工作,通过原始的XML,经过生产流程上的各种环节,输出不同的格式,html, pdf, xhtml….

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有