JAVA基础之设计模式
2016-05-22 14:49
302 查看
设计模式:对问题行之有效的解决方式。其实是一种思想。
1.单例设计模式
解决的问题:就是可以保证一个类在内存中的对象唯一性。
(即一个类只创建一个对象,多个程序调用时不创建对象,只是引用。)
比如对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。
如何保证对象唯一性呢?
1.不允许其他程序用new创建该类对象。
2.在该类创建一个实例。
3.对外提供一个方法让其他程序可以获取该对象。
上面话的意思就是,为了保证只创建一个对象,其他程序使用该对象只能是调用,不能创建新对象。
应该做的方法就是保证其他程序不能创建对象,而自己本身创建一个并私有,且提供方法供其他程序使用。
步骤:
1.私有化该类的构造函数。(构造函数用于创建对象时初始化,一旦私有了构造函数,其他程序就无法创建新对象)
2.通过new在本类中创建一个本类对象。
3.定义一个公有的方法,将创建的对象返回。
示例:
1.单例设计模式
解决的问题:就是可以保证一个类在内存中的对象唯一性。
(即一个类只创建一个对象,多个程序调用时不创建对象,只是引用。)
比如对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。
如何保证对象唯一性呢?
1.不允许其他程序用new创建该类对象。
2.在该类创建一个实例。
3.对外提供一个方法让其他程序可以获取该对象。
上面话的意思就是,为了保证只创建一个对象,其他程序使用该对象只能是调用,不能创建新对象。
应该做的方法就是保证其他程序不能创建对象,而自己本身创建一个并私有,且提供方法供其他程序使用。
步骤:
1.私有化该类的构造函数。(构造函数用于创建对象时初始化,一旦私有了构造函数,其他程序就无法创建新对象)
2.通过new在本类中创建一个本类对象。
3.定义一个公有的方法,将创建的对象返回。
示例:
class Single { public static void main(String[] args) { /*我们在主函数调用Single对象。我们知道调用时有两种方法 一种是对象调用,但是这里我们不能创建对象,就无法调用。 另一种就是类名调用,在这里我们只能使用这种方法。 但是类名调用有个前提,只能是静态的,所以我们调用的公有方法也只能是静态的。*/ Single ss=Single.getInstance(); Single s2=Single.getInstance(); //上面两条语句都是在用类名调用Single中所创建的对象,只是调用后重新命名,其实使用的是一个对象。 System.out.println(ss==s2); //我们判断ss和s2调用的是否是同一个对象,即他们的地址值是否是同一个,结果是true。 System.out.println("----------"); SingleTest s1=SingleTest.getInstance(); SingleTest s3=SingleTest.getInstance(); s1.setNum(30); s3.setNum(8); System.out.println(s1.getNum()); System.out.println(s3.getNum()); } } class Single { private static Single s=new Single();//这是在类中创建一个该类对象。该对象名为s。 //静态函数访问的内容必须是静态的,所以我们给s前加上修饰符,让他转为静态。 //static Single s里的Single是引用数据类型。 //私有该对象是为了避免其他程序在调用时,直接调用s,随意更改。 //为了保证该对象的可控,所以我们私有该对象,只提供函数调用方法。 private Single(){} //这是私有化本类构造函数。 public static Single getInstance()//提供外部使用的公有函数(方法)。 {//我们用类名调用这个函数,这个函数就必须是静态的。 return s; } } //实际应用 class SingleTest { private int num; private static SingleTest St=new SingleTest(); private SingleTest(){} public static SingleTest getInstance() { return St; } public void setNum(int home) { num=home;//如果两个变量名相同,那么this关键词必须写。 } public int getNum() { return num; } }
相关文章推荐
- IO学习(十八)两个图总结常用javaIO流
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实
- JAVA抽奖算法
- JAVA基础之等待/唤醒机制
- eclipse集成aptana插件
- JAVA基础之线程通信
- Java8 随笔记录(五)
- 解决ECLIPSE 卡死的方法
- JAVA基础之构造函数
- Spring AOP总结
- eclipse容易卡死或者较慢的解决方案
- Spring 4.x官方参考文档中文版——第21章 Web MVC框架(5)
- Spring实现AOP的4种方式(转)
- JAVA多线程(一)基本概念和上下文切换性能损耗
- Java内存区域分布
- JAVA基础之内部类
- Struts2 - 常用的constant总结
- java内部类练习
- eclipse调试java程序的九个技巧
- Mockito入门学习(1)–概念介绍