Spring实现的两种设计模式_第1页
Spring实现的两种设计模式_第2页
Spring实现的两种设计模式_第3页
Spring实现的两种设计模式_第4页
Spring实现的两种设计模式_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单态模式单态模式限制了类实例的创建,但采用这种模式创建的类,可以保证仅有一个实例。为了防止单态模式的类被多次实例化,应将类的构造器设成私有,这样就保证了只能通过静态方法获得类实例,而该静态方法则保证每次返回的实例都是同一个,这样就需要将类的实例设置成类属性,由于该属性需要被静态方法访问,因此该属性应设成静态属性。下面给出单态模式的代码publicclassSingletonText(//该类的一个普通属性intvalue;//使用静态属性保存该类的一个实例privatestaticSingletonTextinstance;//构造器私有化,避免该类别多次实例化privateSingletonText()(Syste:out.println("正在执行构造器");}//提供静态方法来返回该类的实例publicstaticSingletonTextgetInstance()(//实例化类实例前,先检查该类的实例是否存在if(instance==null)(//如果不存在,则新建一个实例instance=newSingletonText();}//返回改类的成员变量:改类的实例returninstance;}//下面对该类的普通属性value的setter和getter方法publicintgetValue()(returnvalue;}publicvoidsetValue(intvalue)(this.value=value;}publicstaticvoidmain(String[]args){SingletonTextsi=SingletonTexgetInstance();SingletonTexts2=SingletonTextgetlnstance();s2.setValue(9);Systeout.println(s1==s2);}}从程序的结果可以看出,改类的两个实例完全相同,这证明单态模式的全部实例是同一共享实例,程序里虽然获得了类的两个实例,但实际上只执行依次构造器,因为对于单态模式的类,无论有多少次的创建实例请求,都只执行一次构造器工厂模式工厂模式是根据调用数据返回某个类的一个实例,此类可以是多个类的某一个类。通常,这些类满足共同的规则(接口)或父类。调用者只关心工厂生产的实例是否满足某种规范,即实现的某个接口是否可供自己正常调用(调用者仅仅使用)。该模式给对象之间作出了清晰的角色划分,降低程序的耦合。下面是工厂模式的实例代码定义Person接口publicinterfacePerson{publicStringsayHello(Stringname);publicStringsayGoodBye(Stringname);下面是Person接口的两个实现类publicclassAmericanimplementsPerson(publicStringsayGoodBye(Stringname)(returnname+",Hello";}publicStringsayHello(Stringname)(returnname+",GoodBye";}}publicclassChineseimplementsPerson(publicStringsayGoodBye(Stringname)(returnname+",您好";}publicStringsayHello(Stringname)(returnname+",下次再见";}}下面是Person工厂的代码publicclassPersonFactory(publicPersongetPerson(Stringethnic)(if(ethnic.equals("chin"))(returnnewChinese();else(returnnewAmerican();以上是最简单的工厂模式框架,其主程序部分如下publicclassFactoryText(publicstaticvoidmain(String[]args){//创建PersonFactory的实例,获得工厂实例PersonFactorypfnewPersonFactory();//定义接口Person的实例Personpnull;//使用工厂获得Person的实例p=pf.getPerson"chin");//下面调用Person接口的方法Systemout.println(p.sayHello("wawa"));Systemout.println(p.sayGoodBye("wawa"));//使用工厂获得Person的另一个实例p=pf.getPerson"ame");//再次调用Person接口的方法Systemout.println(p.sayHello("wawa"));Systemout.println(p.sayGoodBye("wawa"));}}Spring对单态与工厂模式的实现随着Spring提供工厂模式的实现,在使用Spring时,无须自己提供工厂类,因为Spring容器是最大的工厂,Spring使用配置文件管理所有的bean,其配置文件中bean由Spring工厂负责生产和管理,<?xmlversion="1.0"encoding="UTF-8"?><!--beans是Spring配置文件的根元素--><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beanshttp://www.springframework.Org/schema/beans/spring-beans-2.5.xsd"><!--定义第一个bean,该bean的id为chinese--><beanid="chinese"class="lee.Chinese"/><!--定义第二个bean,该bean的id为american--><beanid="american"class="lee.American"/></beans>主程序部分如下:publicclassSpringText(publicstaticvoidmain(String[]args){//实例化Spring容器ApplicationContextctxnewFileSystemXmlApplicationContext("bean.xml");//定义Person接口的实例Personpnull;//通过Spring上下文获得chinese实例p=(Person)ctx.getBea"chinese");//执行chinese实例的方法Systemout.println(p.sayHello("wawa"));Systemout.println(p.sayGoodBye("wawa"));//通过Spring上下文获得american实例p=(Person)ctx.getBea"american");//执行american实例的方法Systemo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论