分享
 
 
 

设计模式(一:Abstract Factory模式)

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

设计模式

设计模式观念和理论逐渐成为面向对象(OO)领域中最热门的研究之一。本文将探讨如何使用模式﹐解决软件的常见问题。中所使用的模式都来自于"Design Patterns: Elements of Reusable Object-Oriented Software"一文中所总结的模式。

什么是模式?

模式是人们遭遇到特定问题时﹐大家惯用的应付方式。模式来解决问题﹐而且是有效、可靠的。掌握愈多﹐运用愈成熟﹐就愈是杰出的设计专家。试想我们在工作和生活中总是借助于经验性的、已经被公认的有效的方法来解决现实中得问题。考虑一下,如果我们打靶,三点成一线的瞄准方式是非常有效的,这也是通常我们所采取的方式,可说这就是一种模式,我们可以通过使用这个模式来解决射击问题。

自从1991年以来﹐设计模式理论应用于OO软件的设计上﹐可解决软件设计上的问题。例如﹐软体设计时﹐常见下述问题﹕ 软建模块(Module)之间的耦合性太高﹐使得软件的弹性降低了。我们可利用模式来解决这种问题﹐求增强模块间的独立性﹐提高软体的弹性,降低软体的维护费用﹗

设计模式(Design Pattern)

本文将讲解一些计模式﹐来解决软件设计上的特定问题。首先声明本文中所使用的模式都来自于"Design Patterns: Elements of Reusable Object-Oriented Software"一书中所提到到一有的模式类型。

I: Abstract Factory模式

Abstract Factory模式是为了分离客户与服务而采用的一种模式,其基本的功能是服务的相对性。

首先让我们来看一下下面这段程序代码:

public class test{

public static void main(String[] args) {

Dsp d=new Dsp(1000,800);

d.DisplayData();

}

}

class EmployeeSalary{

private float salary;

private float basesalary;

private float award;

EmployeeSalary() {}

EmployeeSalary(float basesalary,float award)

{this.basesalary=basesalary;

this.award=award;

}

void displaysalary()

{

salary=basesalary+award;

System.out.println(salary);

}

}

class Dsp {

private float x;

private float y;

EmployeeSalary emp ;

Dsp(float x,float y) {

this.x=x;

this.y=y;

emp = new EmployeeSalary(this.x,this.y); }

void DisplayData()

{ emp.displaysalary();}

}

我们可以发现类别间的相互依性很高﹐Dsp类直接使用EmployeeSalary 字眼﹐且使用两次。我们的问题是「若必须将EmployeeSalary 类名称改为ColokEmployeeSalary 时﹐得更换 Dsp类别中的EmployeeSalary字眼」。 所以当我们替换EmployeeSalary类时﹐会牵连到Dsp类﹐替换过程将不会很顺,采用抽象类别﹐可解决部分问题,如下﹕

public class test{

public static void main(String[] args) {

Dsp d=new Dsp(1000,800);

d.DisplayData();

}

}

abstract class Salary {

void displaysalary(){}

}

class EmployeeSalary extends Salary{

private float salary;

private float basesalary;

private float award;

EmployeeSalary() {}

EmployeeSalary(float basesalary,float award)

{this.basesalary=basesalary;

this.award=award;

}

void displaysalary()

{

salary=basesalary+award;

System.out.println(salary);

}

}

class Dsp {

private float x;

private float y;

Salary emp ;

Dsp(float x,float y) {

this.x=x;

this.y=y;

emp = new EmployeeSalary(this.x,this.y); }

void DisplayData()

{ emp.displaysalary();}

}

正如我们所看到的在Dsp类中,我们替换掉了一个饿EmployeeSalary,但是另一个仍然存在于Dsp类中。

我们如何建立起一种模式来彻底的分离纠缠的类呢,这就要用到Abstract Factory模式,其功能就是隔离类,以利于替换。

类1

类2

模式

下面让我们来让我们实现Abstract Factory模式类。

public class test{

public static void main(String[] args) {

Dsp d=new Dsp(new SalaryFactory() ,1000,800);

d.DisplayData();

}

}

abstract class Salary {

void displaysalary(){}

}

class EmployeeSalary extends Salary{

private float salary;

private float basesalary;

private float award;

EmployeeSalary() {}

EmployeeSalary(float basesalary,float award)

{this.basesalary=basesalary;

this.award=award;

}

void displaysalary()

{

salary=basesalary+award;

System.out.println(salary);

}

}

class Dsp {

private float x;

private float y;

Salary emp ;

Dsp(Factory fc ,float x,float y) {

this.x=x;

this.y=y;

emp =fc.CreateDataObject(this.x,this.y); }

void DisplayData()

{ emp.displaysalary();}

}

abstract class Factory {

abstract Salary CreateDataObject(float x,float y);

}

class SalaryFactory extends Factory {

private float x;

private float y;

Salary CreateDataObject(float x,float y)

{ this.x=x;

this.y=y;

return new EmployeeSalary(float x,float y);

}

}

正如我们所看到的Abstract Factory模式中所保含Factory Method模式。上述Dsp类不再使用EmployeeSalary 字﹐这就是模式所创造出来的结果,如图3 所示。如果我们改动了EmployeeSalary类,不如我们要实现ClockEmlpoyeeSalary 时﹐只需更动main()函数

Dsp d=new Dsp(new ClockEmployeeSalaryFactory() ,1000,800);

d.DisplayData();

上述的Factory 类别及其子类别﹐合起来称为Abstract Factory模式。其中的CreateDataObject()抽象方法称为Factory Method模式方法。两者共同创造出Client部分与Server部分的相互独立性。

待续。。。。。。。。。。。。。。。。。。。。。。。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有