登陆注册
15296300000031

第31章 4 例子

大B:“我给你举个例子来说明吧!”

小A:“嗯。好的。”

大B:“让我们建立一个应用:1、接受客户的详细资料(账户、地址和信用卡信息)2、验证输入的信息3、保存输入的信息到相应的文件中。这个应用有三个类:Account、Address和CreditCard。每一个类都有自己的验证和保存数据的方法。”

Listing1:AccountClass

public class Account{

String firstName;

String lastName;

final String ACCOUNTDATAFILE=“AccountData。txt”;

public Account(String fname,String lname){

firstName=fname;

lastName=lname;

}

public boolean isValid(){

/*

Lets go with simpler validation

here to keep the example simpler。

*/

}

public boolean save(){

FileUtil futil=new FileUtil();

String dataLine=getLastName() , getFirstName();

return futil。writeToFile(ACCOUNTDATAFILE,dataLine,true,true);

}

public String getFirstName(){

return firstName;

}

public String getLastName(){

return lastName;

}

}

Listing2:Address Class

public class Address{

String address;

String city;

String state;

final String ADDRESSDATAFILE=“Address。txt”;

public Address(String add,String cty,String st){

address=add;

city=cty;

state=st;

}

public boolean isValid(){

/*

The address validation algorithm

could be complex in real-world

applications。

Lets go with simpler validation

here to keep the example simpler。

*/

if(getState()。trim()。length()(2)

return false;

return true;

}

public boolean save(){

FileUtil futil=new FileUtil();

String dataLine=getAddress() ,“ getCity() ”, getState();

return futil。writeToFile(ADDRESSDATAFILE,dataLine,true,true);

}

public String getAddress(){

return address;

}

public String getCity(){

return city;

}

public String getState(){

return state;

}

}

Listing3:CreditCard Class

public class CreditCard{

String cardType;

String cardNumber;

String cardExpDate;

final String CCDATAFILE=“CC。txt”;

public CreditCard(String ccType,String ccNumber,

String ccExpDate){

cardType=ccType;

cardNumber=ccNumber;

cardExpDate=ccExpDate;

}

public boolean isValid(){

/*

Lets go with simpler validation

here to keep the example simpler。

*/

if(getCardType()。equals(AccountManager。VISA)){

return(getCardNumber()。trim()。length()……16);

}

if(getCardType()。equals(AccountManager。DISCOVER)){

return(getCardNumber()。trim()。length()……15);

}

if(getCardType()。equals(AccountManager。MASTER)){

return(getCardNumber()。trim()。length()……16);

}

return false;

}

public boolean save(){

FileUtil futil=new FileUtil();

String dataLine=getCardType() ,“ getCardNumber() ”, getCardExpDate();

return futil。writeToFile(CCDATAFILE,dataLine,true,true);

}

public String getCardType(){

return cardType;

}

public String getCardNumber(){

return cardNumber;

}

public String getCardExpDate(){

return cardExpDate;

}

}

Listing4:Client AccountManager Class

public class AccountManager extends JFrame{

public static final-0*963String newline=“\n”;

public static final String VALIDATESAVE=“Validate&Save”;

public AccountManager(){

super(“Facade Pattern-Example”);

cmbCardType=new JComboBox();

cmbCardType。addItem(AccountManager。VISA);

cmbCardType。addItem(AccountManager。MASTER);

cmbCardType。addItem(AccountManager。DISCOVER);

//Create buttons

JButton validateSaveButton=new JButton(AccountManager。VALIDATESAVE);

}

public String getFirstName(){

return txtFirstName。getText();

}

}//End of class AccountManager

当客户AccountManage运行的时候,展示的用户接口如下:

图大B:“在这个例子中应用外观模式是一个很好的设计,它可以降低客户和子系统组件(Address、Account和CreditCard)之间的耦合度。应用外观模式,定义一个外观类CustomerFacade(Figure6 and Listing5)。它为由客户数据处理类(Address、Account和CreditCard)所组成的子系统提供一个高层次的、简单的接口。”

CustomerFacade

address:String

city:String

state:String

cardType:String

cardNumber:String

cardExpDate:String

fname:String

lname:String

setAddress(inAddress:String)

setCity(inCity:String)

setState(inState:String)

setCardType(inCardType:String)

setCardNumber(inCardNumber:String)

setCardExpDate(inCardExpDate:String)

setFName(inFName:String)

setLName(inLName:String)

saveCustomerData()

public class CustomerFacade{

private String address;

private String city;

private String state;

private String cardType;

private String cardNumber;

private String cardExpDate;

private String fname;

private String lname;

public void setAddress(String inAddress){

address=inAddress;

}

public void setCity(String inCity){

city=inCity;

}

public void setState(String inState){

state=inState;

}

public void setFName(String inFName){

fname=inFName;

}

public void setLName(String inLName){

lname=inLName;

}

public void setCardType(String inCardType){

cardType=inCardType;

}

public void setCardNumber(String inCardNumber){

cardNumber=inCardNumber;

}

public void setCardExpDate(String inCardExpDate){

cardExpDate=inCardExpDate;

}

public boolean saveCustomerData(){

Address objAddress;

Account objAccount;

CreditCard objCreditCard;

/*

client is transparent from the following

set of subsystem related operations。

*/

boolean validData=true;

String errorMessage=;

objAccount=new Account(fname,lname);

if(objAccount。isValid()……false){

validData=false;

errorMessage=“Invalid FirstName/LastName”;

}

objAddress=new Address(address,city,state);

if(objAddress。isValid()……false){

validData=false;

errorMessage=“Invalid Address/City/State”;

}

objCreditCard=new CreditCard(cardType,cardNumber,cardExpDate);

if(objCreditCard。isValid()……false){

validData=false;

errorMessage=“Invalid CreditCard Info”;

}

if(!validData){

System。out。println(errorMessage);

return false;

}

if(objAddress。save()&objAccount。save()&objCreditCard。save()){

return true;

}else{

return false;

}

}

}

大B:“CustomerFacade类以saveCustomData方法的形式提供了业务层次上的服务。客户AccountManager不是直接和子系统的每一个组件交互,而是使用了由CustomFacade对象提供的验证和保存客户数据的更高层次、更简单的接口。”

B:“在新的设计中,为了验证和保存客户数据,客户需要:1、建立或获得外观对象CustomFacade的一个实例。2、传递数据给CustomFacade实例进行验证和保存。3、调用CustomFacade实例上的saveCustomData方法。CustomFacade处理创建子系统中必要的对象并且调用这些对象上相应的验证、保存客户数据的方法这些细节问题。客户不再需要直接访问任何的子系统中的对象。”

小A:“师兄,应用外观模式有哪些注意事项?”

大B:“应用外观模式要注意以下事项:1、在设计外观时,不需要增加额外的功能。2、不要从外观方法中返回子系统中的组件给客户。例如:有一个下面的方法:CreditCard getCreditCard()会报漏子系统的细节给客户。应用就不能从应用外观模式中取得最大的好处。3、应用外观的目的是提供一个高层次的接口。因此,外观方法最适合提供特定的高层次的业务服务,而不是进行底层次的单独的业务执行。”

小A:“明白。我记住了!”

同类推荐
  • 信息技术教育大全-操作系统大全

    信息技术教育大全-操作系统大全

    本书系统介绍说明了有关电子信息系统及操作系统等知识,希望对该信息技术有需求的读者能够从中得到帮助。
  • 条形码技术与应用

    条形码技术与应用

    条形码是一种可供电子仪器自动识别的标准符号,是由一组黑白相间、粗细不同的条、空符号按一定编码规则排列组成的标记,用以表示一定的信息,确认某个物体或规定它的移动,能正确快速地为产、供、销各环节在采集、处理和交换信息时提供标识。
  • 信息安全

    信息安全

    我们不得不看到,全球信息化发展,使信息安全成为维护国家安全的重要屏障,信息安全问题正在为国与国之间带来新的制约关系。当然,这只是我们强调信息安全极端重要性的一个原因。事实上,信息安全已经上升为国家安全的重要组成部分,这是信息时代国家安全的明显特征,也是很多国家的共识。但与其他国家安全元素不同,如果脱离信息化发展的环境,“信息安全”只是一个抽象的目标,它要通过对国家的政治、经济、文化等方面的影响体现其对国家安全的意义,并以保障信息化发展为目标取向。因此,我们说信息安全是信息时代国家安全的基石。
  • 三维动画审美谈

    三维动画审美谈

    数字时代,美的标准充满更多的不确定性。而三维动画以数字图像形式成为这个图时代的代表。三维动画及三维图像不仅仅是由于应用了仿真数字图像技术而带来的虚拟空间,还有更多的是由三维图像技术所引发或引导的被扩展的图像技术,这些技术无不应用在现代视觉设计领域的各个方面,并且,由此引起社会的追热,引起审美观念的改变。这些改变是在进行中的,变化中的,也是在发展中的。对于未知的美,我们做的只是追寻和记录,我们不知道以后的美将会是什么样,尽管我们苦苦追寻,孜孜探讨,同时也在默默审视。我们在追寻中享受美,在探讨中认知美,在审视中体验美……
  • 中文版AutoCAD2005建筑绘图精讲精学

    中文版AutoCAD2005建筑绘图精讲精学

    本书从中文版AutoCAD2005建筑绘图的基础进行介绍,讲解了建筑绘图的环境设置、二维建筑图形的绘制、二维建筑及装饰图形的编辑、建筑绘图中的文字标注和图形查询、建筑装潢平面图中的尺寸标注、建筑绘图中图块的应用、建筑平面图的绘制、建筑立面图的绘制、建筑剖面图的绘制、建筑绘图中的三维造型、三维建筑模型绘制及建筑图纸的布局与打印输出等内容。
热门推荐
  • 妖界奇遇冒险

    妖界奇遇冒险

    平凡的高中生王雅茹突然别告知自己不是舅妈亲生的,还被送去了妖界的妖精魔法学校,在妖界相遇的朋友和亲人们又会发生怎样的事呢?敬请期待。
  • exo之十二殿下放我走

    exo之十二殿下放我走

    【np】【大甜小虐】她,是世界首富的独女。他们,是EXO集团12位继承人。十三位倾城倾国的少年少女,拥有娃娃亲,但,美若天仙的女子却想要逃离这个让人羡慕的婚事。当她以另一个身份接近十二位未婚夫,十二位少爷会怎样做?当身份被揭穿,她与他们又会发生什么样的故事?“呵,既然你们不信我,我何必自作多情留在这里?”两年后她华丽归来,进行她的复仇。“对不起……”“哦?可我不想原谅你们怎么办?”她与他们的结局究竟会是什么?敬请期待……
  • 随身空间修仙

    随身空间修仙

    杜星,一个孤儿前二十年受尽苦难,无意中得到一个随身空间,无限面积还带加速作用。本以为可以开始享受生活。谁知眼前一黑,来到了一个修炼世界,无穷的精彩就这样展现在他眼前,请看一个异界来客,怎样领略这个神奇世界的精彩!怎样建立起史无前例的大帝国!怎么走上辉煌的长生之路!
  • 人世图

    人世图

    出生在平凡家庭的周仁伍是一个懂事的孩子,但是他并不知道自己的命运注定了不平凡,战天剑的感应,神秘的强者,一个平凡的少年郎却走上了一个世界之巅的强者之路。(情节虚构,切勿模仿)
  • 优质马铃薯

    优质马铃薯

    《金阳光新农村丛书》围绕农民朋友十分关心的具体话题,分“新农民技术能手暠“新农业产业拓展暠和“新农村和谐社会暠三个系列,分批出版“新农民技术能手暠系列除了传授实用的农业技术,还介绍了如何闯市场、如何经营;“新农业产业拓展暠系列介绍了现代农业的新趋势、新模式;“新农村和谐社会暠系列包括农村政策宣讲、常见病防治、乡村文化室建立,还对农民进城务工的一些知识作了介绍。全书新颖实用,简明易懂。
  • 刺杀全世界

    刺杀全世界

    你以为身边的世界很安全?别傻了!世上最最古老的职业从未萧条。枪械、刀具、绳索、药剂、拳脚,当然还有无影无形的意外和心理操控,能使人毙命的方法真是无穷无尽……来吧,来这看看候锐是如何从纯良变为黑暗,一步步成为黑暗强者的过程!每天更新时间:一更12:00,二更18:00,不少于6000字,请大家监督。302593913是读者群,也很欢迎大家来聊天打屁。重点提示一下,VIP第四章比较黑暗残暴,不喜欢的朋友可以直接跳到第五章观看。
  • 成就你一生的心态全集

    成就你一生的心态全集

    心态决定命运。一个人有什么样的心态,就会有什么样的人生。本书在向读者阐释了积极心态对人收获幸福、取得成功所起的至关重要的作用的同时,又有针对性地对好心态的培养和运用提供了许多有效方法。从而帮助读者以平静的心态来面对人生的取舍得失,以乐观的心态来应对人生道路上的艰难险阻,从而改变自己的人生现状,成为命运的主人!
  • 老婆再嫁我一次

    老婆再嫁我一次

    “你让我喝的是什么?”仅是半杯红酒,她的身体却如被泼了酒精燃烧起来,恼火的问。“酒里有药。”他很无奈的一声叹息之后,他邪气一笑:“我也喝了,所以……只能互相解了。”那夜,谋得一份兔女郎工作的她,被一个陌生的女人硬推进总统套房……那一夜,债主找上门,为避免被卖的命运,她央求戴着黑豹面具的男人救了她,却被面具男人威胁让她嫁给他,更不知晓,面具男与他竟是同一人……
  • 战神悲歌

    战神悲歌

    父与异族相恋,致使家族破败,沦为一介下人。又因圣物,惨遭挖坟与搜魂。然圣物在手,天下我手,莫欺少年穷。受九天雷霆,锻体之痛。忍天地奇火,炼狱灼烧。成神之路,千里独行,金戈铁马。我踏过尸山,淌过血海,搅动天地风云。功成之时,世界将为之颤抖。
  • 斗罗穿越之野望

    斗罗穿越之野望

    斗罗的disk,斗罗的摇,斗罗的路人在斗罗的瞧。。。