Java---设计模块(设计模块的简介及最简单的俩个单例代码加测试)

举报
谙忆 发表于 2021/05/27 14:30:14 2021/05/27
【摘要】 设计模式学习概述: ★ 为什么要学习设计模式 1、设计模式都是一些相对优秀的解决方案,很多问题都是典型的、有代表性的问题,学习设计模式,我们就不用自己从头来解决这些问题,相当于在巨人的肩膀上,复用这些方案即可。 2、设计模式已经成为专业人士的常用词汇,不懂不利于交流。 3、能让你设计的系统更加专业,让系统有更好的架构。 ★ 学习设计模式的层次 1、基本入门级...

设计模式学习概述:
★ 为什么要学习设计模式
1、设计模式都是一些相对优秀的解决方案,很多问题都是典型的、有代表性的问题,学习设计模式,我们就不用自己从头来解决这些问题,相当于在巨人的肩膀上,复用这些方案即可。
2、设计模式已经成为专业人士的常用词汇,不懂不利于交流。
3、能让你设计的系统更加专业,让系统有更好的架构。

★ 学习设计模式的层次
1、基本入门级——套用型(半年到一年左右时间领悟学会)
2、基本掌握级——可变形使用型(一年左右时间领悟学会)
3、真正理解和掌握级——思想上吸收和趋同型(看个人天赋,不确定时间学会)

设计模式1——单例
解决:保证了一个类在内存中只能有一个对象。
思路:
1、如果其他程序能够随意用new创建该类对象,那么就无法控制个数。因此,不让其他程序用new创建该类的对象。
2、既然不让其他程序new该类对象,那么该类在自己内部就要创建一个对象,否则该类就永远无法创建对象了。
3、该类将创建的对象对外(整个系统)提供,让其他程序获取并使用。

步骤:
1、 将该类中的构造函数私有化。
2、在本类中创建一个本类对象。
3、定义一个方法,返回值类型是本类类型。让其他程序通过该方法就可以获取到该类对象。

第一种方法:

package cn.hncu.pattern.singleton.one;
/*
 *  饿汉式 */
public class Single { private static final Single S  = new Single(); private Single(){ } public static Single getInstance(){ return S; }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

测试的类:

package cn.hncu.pattern.singleton.one;

public class TestSingle { public static void main(String[] args) { System.out.println(Single.getInstance()); System.out.println(Single.getInstance()); System.out.println(Single.getInstance()); System.out.println(Single.getInstance()); System.out.println(Single.getInstance()); Single s1 = Single.getInstance(); Single s2 = Single.getInstance(); //测试地址值是否相等 System.out.println(s1==s2); }

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

测试结果:

cn.hncu.pattern.singleton.one.Single@bcda2d
cn.hncu.pattern.singleton.one.Single@bcda2d
cn.hncu.pattern.singleton.one.Single@bcda2d
cn.hncu.pattern.singleton.one.Single@bcda2d
cn.hncu.pattern.singleton.one.Single@bcda2d
true

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

第二种方法:

package cn.hncu.pattern.singleton.two;
/*
 * 懒汉式
 */
public class Single { private static Single s = null; private Single(){ } //单例的延迟加载方式,有一个小bug,就是多线程加载时,会出现多次new的情况 //下面给出解决这个延迟的问题。
//  public static Single getInstance(){
// if(s==null){
// s = new Single();
// }
// return s;
//  } //优化方案---多线程加锁,谁调用锁谁,每次只能让一个线程调用 public static synchronized Single getInstance(){ if(s==null){ s = new Single(); } return s; }

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

测试的类:

package cn.hncu.pattern.singleton.two;

public class TestSingle2 { public static void main(String[] args) { Thread[] td = new Thread[50]; //给一个线程数组 for(int i=0;i<td.length;i++){ td[i] = new useSingle(); }//new出每一个线程 for(int i=0;i<td.length;i++){ td[i].start(); } }
}

class useSingle extends Thread { @Override public void run() { Single obj = Single.getInstance(); System.out.println(obj); }

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

测试结果:

cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081
cn.hncu.pattern.singleton.two.Single@2af081

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

文章来源: chenhx.blog.csdn.net,作者:谙忆,版权归原作者所有,如需转载,请联系作者。

原文链接:chenhx.blog.csdn.net/article/details/51044941

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。