java工厂模式实例

java工厂模式实例

ID:35514907

大小:36.80 KB

页数:7页

时间:2019-03-25

java工厂模式实例_第1页
java工厂模式实例_第2页
java工厂模式实例_第3页
java工厂模式实例_第4页
java工厂模式实例_第5页
资源描述:

《java工厂模式实例》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、在面向对象的编程中,工厂模式是一种经常被使用到的模式。根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。工厂模式的原理为了理解工厂模式是如果工作的,让我们来看一下图一:图1工厂模式的工作原理在图1中,X是基类,Xy和Xz继承了X类。而工厂类能够根据程序传递给它的数据决定生成那一个子类的实例。在右边定义了一个getClass方法,该方法需要参数a并返回一个X类的实例。对于程序员来说,返回

2、的究竟是Xy还是Xz的实例并不重要,因为它们有相同的方法,只不过这些方法的内部实现不同罢了。一个简单的例子在什么情况下会使用到工厂模式呢?让我们来看一个简单的例子。在一些网上的调查表中,经常要求填写姓名。有些人填写时姓放在前面,名放在后面(例如中国人填写姓名的习惯);而有些人填写时采用"名,姓"或者"姓,名"的格式(西方大多数文化中都这样填写姓名)。现在让我们假设通过判断姓名中是否包含了","和空格就可以判断到底是姓在前面还是名在前面。下面然我们先定义一个基类Namer:classNamer{pr

3、otectedStringlast;//姓protectedStringfirst;//名publicStringgetFirst(){returnfirst;}publicStringgetLast(){returnlast;}}在基类中我们将姓和名保存在两个不同的变量中,并且提供了getFirst()和getLast()方法。由于子类需要使用到保存姓名的变量,因此我们将它们设定为Protected。现在我们可以实现两个类来区分上面提到的两种情况。在WithoutComma类中,我们假设如果读入

4、字符串中没有空格,则第一个字符是姓,剩下的字符是名;否者第一个空格之前是名,其后是姓:classWithoutCommaextendsNamer{publicWithoutComma(Strings){inti=s.lastIndexOf("");if(i>0){//空格左边是名first=s.substring(0,i).trim();//空格右边是姓last=s.substring(i+1).trim();}else{//没有空格,则第一个字符是姓,以后的字符是名last=s.substrin

5、g(0,1);first=s.substring(1).trim();}}}对于姓名中包含逗号的情况,代码如下。classWithCommaextendsNamer{publicWithComma(Strings){inti=s.indexOf(",");if(i>0){//逗号左边的是姓last=s.substring(0,i).trim();//都号右边的是名first=s.substring(i+1).trim();}else{//没有逗号,将字符串作为名,姓设为空last=s;first=

6、"";}}}接下来就需要实现工厂类了。在工厂类中,我们只需要根据输入的名称中是否带有逗号来生成不同的类的实例。classNameFactory{publicNamergetNamer(Stringentry){inti=entry.indexOf(",");//检测是否存在","if(i>0)returnnewWithComma(entry);elsereturnnewWithoutComma(entry);}}我们可已通过图二中的例子来看一看在程序中如何使用工厂类:图2工厂模式测试程序在程序中,

7、首先需要初始化工厂类:NameFactorynfactory=newNameFactory();然后当"获得姓名"按钮被按下以后,调用computeName()方法,而该方法又调用工厂类的getNamer()方法获得Namer的实例,并将姓和名显示在相应的文本框中:Namernmr;nmr=nf.getNamer(jTextFieldName.getText());jTextFieldFirstName.setText(nmr.getFirst());jTextFieldLastName.setT

8、ext(nmr.getLast());程序的源代码如下:publicclassTestextendsjavax.swing.JFrame{privateNameFactorynf;publicTest(){nf=newNameFactory();initComponents();}privatevoidinitComponents(){jPanel1=newjavax.swing.JPanel();jPanel2=newjavax.swing.JPanel();jLabel1=ne

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。