首页 > 范文大全 > 正文

Java中单态设计模式的教学过程设计

开篇:润墨网以专业的文秘视角,为您筛选了一篇Java中单态设计模式的教学过程设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:单态设计模式在java课程中很少涉及,本文讲述了怎样将此内容巧妙地引入到课堂中去,并通过教学过程的合理设计,使得学生不但能够轻松掌握此内容,还可以深入理解其它的相关内容。

关键词:单态设计模式;Java;教学

中图分类号:G642 文献标识码:A

1引言

设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式。要成为一名优秀的Java程序员,一般都需要掌握Java中的几种设计模式,单态设计模式就是其中之一。但能否把此作为Java程序设计这门课的教学内容的一部分,仍是一个值得商榷的问题。因为在众多学者看来,此内容复杂而难懂,因此在目前的教材中,尚未发现涉及此内容的。本文作者在教学中引入了单态设计模式的教学内容,结果证明只要对此内容的教学过程进行合理设计,学生不但可以掌握它,还可以深入理解掌握其它几方面的知识。

2单态设计模式的含义及作用

所谓类的单态设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且其它类可以通过某种方法访问该实例。其主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。生活中很多方面我们都要用到此设计模式,例如建立目录、数据库连接、资源管理器等。

3单态设计模式的教学过程设计

3.1单态设计模式的提出

在教学中我们没有直接讲解怎么设计单态程序,而是采取循序渐进的方法,不但让学生轻松掌握该知识,还对Java面向对象的特性有更深的认识。因此我们设计了如下的例1。

例1:

class Singleton

{

private int value; //注释1

public Singleton() //注释2

{

System.out.println("正在执行构造器....");

}

//注释3

public int getValue()

{

return value;

}

public void setValue(int value)

{

this.value = value;

}

}

class TestSingleton

{

public static void main(String args[])

{ int v1,v2;

Singleton t1=new Singleton();

Singleton t2=new Singleton();

t1.setValue(3);

t2.setValue(5);

v1=t1.getValue();

v2=t2.getValue();

System.out.println("对象1的值为:"+v1+"\n对象2的值为:"+v2);

}

}

通过此例可以让学生了解我们在设计一个类时,往往把其成员属性设置成private访问权限,使得其它类不能直接访问该成员属性,同时对外提供修改成员属性的方法setXXX和读取成员的方法getXXX,这些方法的访问权限是public的,可被所有其它类访问。这样做的目的是我们可以在修改成员的方法中加入更具体的更合理的控制逻辑,例如我们可以在修改人的年龄的方法setAge中限定只能将年龄设置为0到150之间的数,否则不允许修改。

让学生掌握以上知识后,教师可提出在上例中创建了类Singleton的两个实例,运行结果如图1所示。我们也可以创建更多该类的实例,但某些情况下若只能产生某个类的一个实例,那么能否做到呢?在提出该问题后,可列举生活中的例子,说明思考此问题的必要性,进而提出单态设计模式的概念。接下来就引导学生对上面的程序进行改进,来设计理解单态设计模式。

3.2单态设计模式的设计

产生某类的实例时需要调用该类的构造方法,若该构造方法可以被其他类直接访问,就不能限制在其他类中只产生一个实例。因此,我们首先必须将类的构造方法的访问权限设置为private,这样,此构造方法就只能在本类中使用来创建对象,而不能用new 操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因此,应将例1中的注释2所在的行修改为private Singleton();,同时在注释1所在的行创建一个对象,即private static Singleton instance=new Singleton();。

经过以上的改进,在类的外部无法创建Singleton类的对象,但也无法得到类的对象。因此,我们需要在Singleton类的内部对外提供一个可以访问到对象的方法,并且该方法还必须是静态的,因为调用该方法时外部类中还没有对象,只能通过类名来访问。又因为静态方法不能直接访问类中的非静态成员变量,所以,该类内部产生的那个对象变量也必须定义成静态的。由此,我们需要在例1中注释3所在的位置加入下面的方法:

public static Singleton getInstance()

{

return instance;

}

3.3单态设计模式的测试

对例1经过以上的改进后,类Singleton是否就只能产生一个实例呢?我们设计了如下的例2对其进行测试。

例2:

class TestSingleton

{

public static void main(String args[])

{ int v1,v2;

Singleton t1=Singleton.getInstance();

Singleton t2=Singleton.getInstance();

if(t1==t2) System.out.println("只能创建一个实例"); //注释4

t1.setValue(3);

t2.setValue(5);

v1=t1.getValue();

v2=t2.getValue();

System.out.println("对象1的值为:"+v1+"\n对象2的值为:"+v2); //注释5

}

}

在此测试程序中,虽然声明了两个Singleton类的对象名t1和t2,并通过类Singleton的getInstance()方法得到了该类的实例,但实际上无论在外部类中调用几次getInstance()方法,访问到的都是同一个对象。为了证明此结论,在测试程序例2中我们设计了两个测试方法。第一个测试方法是在注释4所在的行,我们对t1和t2进行是否相等的比较,若相等则输出“只能创建一个实例”这个字符串。大家都知道“==”运算符比较的是两个对象名的引用值是否相等,若相等说明这两个对象名指向的是同一个对象。第二个测试方法是在注释5所在的行,分别输出对象t1、t2的value成员的值。若二者相等并且都是5,则说明t1和t2指向的是同一个对象,若v1的值为3,v2的值为5,则说明t1和t2指向的是不同的实例对象。测试程序的运行结果如图2所示,验证了t1和t2是同一个对象,即对例1经过改进后的程序是一个单态程序,外部类只能获得Singleton类的一个实例。

4结束语

笔者将上述设计过程应用于两届学生,均取得了良好的效果。实践证明,单态设计模式虽然难懂,但只要教师对其教学过程进行合理设计,学生不但能够掌握该知识,还可以从中加深对其他知识的理解。本文语言通俗,教学过程设计巧妙,可以为自学单态设计模式的学生提供良好的帮助,也可以为教师教学提供借鉴。

The Teaching Process Design of Singleton Design Pattern

WANG Shuang, ZHAO Hui-yang

(College of Computer Science and Technology, Xuchang University, Xuchang 461000, China)

Abstract: Singleton design pattern is very little involved in the Java cource. This paper tells us how to introduce it into classroom teaching ingeniously. And student can not only grasp this content easily but also understand other related contents deeply by teachers’ designing teaching process reasonably.

Keywords: Singleton Design Pattern, Java, teaching

参考文献:

[1] 耿祥义,张跃平. Java 2实用教程(第3版)[M]. 北京:清华大学出版社,2006.

[2] 朱喜福. Java程序设计(第2版)[M]. 北京:人民邮电出版社,2007.