《Java与模式》重点总结02.docx
- 文档编号:8161071
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:18
- 大小:410.68KB
《Java与模式》重点总结02.docx
《《Java与模式》重点总结02.docx》由会员分享,可在线阅读,更多相关《《Java与模式》重点总结02.docx(18页珍藏版)》请在冰豆网上搜索。
《Java与模式》重点总结02
二、单例(Singleton)模式
1、饿汉式单例类
(1)示例类图
(2)示例代码清单
packagecom.javapatterns.singleton.demos;
/**
*Onlyonceinstanceoftheclassmaybecreatedduringtheexecutionofanygivenprogram.
*InstancesofthisclassshouldbeaquiredthroughthegetInstance()method.
*Noticethattherearenopublicconstructorsforthisclass.
*/
publicclassEagerSingleton{
/**@labelCreates*/
privatestaticfinalEagerSingletonm_instance=newEagerSingleton();
privateEagerSingleton(){
}
publicstaticEagerSingletongetInstance(){
returnm_instance;
}
}
2、懒汉式单例类
(1)示例类图
(2)示例代码清单
packagecom.javapatterns.singleton.demos;
/**
*Onlyonceinstanceoftheclassmaybecreatedduringtheexecutionofany
*givenprogram.Instancesofthisclassshouldbeaquiredthroughthe
*getInstance()method.Noticethattherearenopublicconstructorsforthis
*class.
*/
publicclassLazySingleton{
/**
*@labelCreates
*/
privatestaticLazySingletonm_instance=null;
privateLazySingleton(){
}
synchronizedpublicstaticLazySingletongetInstance(){
if(m_instance==null){
m_instance=newLazySingleton();
}
returnm_instance;
}
}
3、登记式单例类:
为了克服不可继承的缺点
(1)示例类图
(2)示例代码清单
packagecom.javapatterns.singleton.demos;
importjava.util.HashMap;
publicclassRegSingleton{
staticprivateHashMapm_registry=newHashMap();
/**
*@labelCreates
*@directed
*/
/*#privateRegSingletonChildlnkRegSingletonChild;*/
/**
*@labelCreates
*@directed
*/
/*#privateRegSingletonlnkRegSingleton;*/
static{
RegSingletonx=newRegSingleton();
m_registry.put(x.getClass().getName(),x);
}
protectedRegSingleton(){
}
staticpublicRegSingletongetInstance(Stringname){
if(name==null){
name="com.javapatterns.singleton.demos.RegSingleton";
}
System.out.println("FromRegSingleton:
requestingfor"+name);
if(m_registry.get(name)==null){
try{
m_registry.put(name,Class.forName(name).newInstance());
}catch(ClassNotFoundExceptione){
System.out.println("Class"+name+"isnotfound.");
}catch(InstantiationExceptione){
System.out.println("Class"+name
+"cannotbeinstantiated.");
}catch(IllegalAccessExceptione){
System.out.println("Class"+name+"cannotbeaccessed.");
}
}
return(RegSingleton)(m_registry.get(name));
}
publicStringabout(){
return"Hello,IamRegSingleton.";
}
}
4、登记式单例类的子类:
(1)示例类图
(2)示例代码清单
packagecom.javapatterns.singleton.demos;
/**
*ThisclassisasubclassofRegSingleton
*/
importjava.util.HashMap;
publicclassRegSingletonChildextendsRegSingleton{
publicRegSingletonChild(){
}
staticpublicRegSingletonChildgetInstance(){
return(RegSingletonChild)RegSingleton
.getInstance("com.javapatterns.singleton.demos.RegSingletonChild");
}
publicStringabout(){
return"Hello,IamRegSingletonChild.";
}
}
(3)测试类代码清单
packagecom.javapatterns.singleton.demos;
publicclassRegSingletonTest{
publicstaticvoidmain(String[]args){
//
(1)Testeager
System.out.println(EagerSingleton.getInstance());
//
(2)Testreg
System.out.println(RegSingleton.getInstance(
"com.javapatterns.singleton.demos.RegSingleton").about());
System.out.println(RegSingleton.getInstance(null).about());
System.out.println(RegSingleton.getInstance(
"com.javapatterns.singleton.demos.RegSingletonChild").about());
System.out.println(RegSingletonChild.getInstance().about());
}
}
5、多例(Multiton)模式:
(1)示例类图
(2)示例代码清单
packagecom.javapatterns.multilingual.dice;
importjava.util.Random;
importjava.util.Date;
publicclassDie{
privatestaticDiedie1=newDie();
privatestaticDiedie2=newDie();
privateDie(){
}
publicstaticDiegetInstance(intwhichOne){
if(whichOne==1){
returndie1;
}else{
returndie2;
}
}
publicsynchronizedintdice(){
Dated=newDate();
Randomr=newRandom(d.getTime());
intvalue=r.nextInt();
value=Math.abs(value);
value=value%6;
value+=1;
System.out.println(value);
returnvalue;
}
}
测试类
packagecom.javapatterns.multilingual.dice;
publicclassClient{
privatestaticDiedie1;
privatestaticDiedie2;
publicstaticvoidmain(String[]args){
die1=Die.getInstance
(1);
die2=Die.getInstance
(2);
die1.dice();
die2.dice();
}
}
三、建造(Builder)模式
(1)示例类图
(2)示例代码清单
packagecom.javapatterns.builder.extended;
publicinterfaceProduct{
}
packagecom.javapatterns.builder.extended;
publicclassProduct1implementsProduct{
publicProduct1(){
//Writeyourcodehere
}
}
packagecom.javapatterns.builder.extended;
publicclassProduct2implementsProduct{
publicProduct2(){
//Writeyourcodehere
}
}
packagecom.javapatterns.builder.extended;
abstractpublicclassBuilder{
publicabstractvoidbuildPart1();
publicabstractvoidbuildPart2();
publicabstractProductretrieveResult();
}
packagecom.javapatterns.builder.extended;
publicclassConcreteBuilder1extendsBuilder{
/**
*@labelCreates
*/
privateProduct1product=newProduct1();
publicvoidbuildPart1(){
//buildthefirstpartoftheproduct
System.out.println("buildPart1ofProduct1");
}
publicvoidbuildPart2(){
//buildthesecondpartoftheproduct
System.out.println("buildPart2ofProduct1");
}
publicProductretrieveResult(){
returnproduct;
}
}
packagecom.javapatterns.builder.extended;
publicclassConcreteBuilder2extendsBuilder{
/**
*@labelCreates
*/
privateProduct2product=newProduct2();
publicvoidbuildPart1(){
//buildthefirstpartoftheproduct
System.out.println("buildPart1ofProduct2");
}
publicvoidbuildPart2(){
//buildthesecondpartoftheproduct
System.out.println("buildPart2ofProduct2");
}
publicProductretrieveResult(){
returnproduct;
}
}
packagecom.javapatterns.builder.extended;
publicclassDirector{
/**
*@linkaggregation
*@directed
*@clientRolebuilder
*/
privateBuilderbuilder;
publicDirector(Builderbuilder){
this.builder=builder;
}
publicvoidconstruct(){
builder=newConcreteBuilder1();
builder.buildPart1();
builder.buildPart2();
builder.retrieveResult();
//continuewithothercode
}
}
packagecom.javapatterns.builder.extended;
publicclassClient{
privatestaticBuilderbuilder;
privatestaticDirectordirector;
publicstaticvoidmain(String[]args){
director=newDirector(builder);
director.construct();
}
}
(3)其他示例类图
四、原始模型(Prototype)模式
1、
(1)示例类图
(2)示例代码清单:
packagecom.javapatterns.prototype;
publicinterfacePrototypeextendsCloneable{
Objectclone();
}
packagecom.javapatterns.prototype;
publicclassConcretePrototypeimplementsPrototype{
publicObjectclone(){
try{
returnsuper.clone();
}catch(CloneNotSupportedExceptione){
//writeyourcodehere
returnnull;
}
}
}
packagecom.javapatterns.prototype;
publicclassClient{
/**
*@directed
*@clientRoleprototype
*@linkaggregation
*@clientCardinality1
*@supplierCardinality1..*
*/
privatePrototypeprototype;
publicvoidoperation(Prototypeexample){
Prototypep=(Prototype)example.clone();
}
}
2、
(1)示例类图
(2)示例代码清单:
packagecom.javapatterns.prototype.manager;
publicinterfacePrototypeextendsCloneable{
publicObjectclone();
}
packagecom.javapatterns.prototype.manager;
publicclassConcretePrototypeimplementsPrototype{
publicsynchronizedObjectclone(){
Prototypetemp=null;
try{
temp=(Prototype)super.clone();
returntemp;
}catch(CloneNotSupportedExceptione){
System.out.println("Clonefailed.");
}finally{
returntemp;
}
}
}
packagecom.javapatterns.prototype.manager;
importjava.util.Vector;
publicclassPrototypeManager{
privateVectorobjects=newVector();
publicvoidadd(Prototypeobject){
objects.add(object);
}
publicPrototypeget(inti){
return(Prototype)objects.get(i);
}
publicintgetSize(){
returnobjects.size();
}
}
packagecom.javapatterns.prototype.manager;
publicclassClient{
privatePrototypeManagermgr;
privatePrototypeprototype;
publicvoidregisterPrototype(){
prototype=newConcretePrototype();
Prototypecopytype=(Prototype)prototype.clone();
mgr.add(copytype);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java与模式 Java 模式 重点 总结 02