Java---设计模块(设计模块的简介及最简单的俩个单例代码加测试)
发布日期:2021-06-29 13:33:13
浏览次数:2
分类:技术文章
本文共 4325 字,大约阅读时间需要 14 分钟。
设计模式学习概述:
★ 为什么要学习设计模式 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; }}
测试的类:
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); }}
测试结果:
cn.hncu.pattern.singleton.one.Single@bcda2dcn.hncu.pattern.singleton.one.Single@bcda2dcn.hncu.pattern.singleton.one.Single@bcda2dcn.hncu.pattern.singleton.one.Single@bcda2dcn.hncu.pattern.singleton.one.Single@bcda2dtrue
第二种方法:
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; }}
测试的类:
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
测试结果:
cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081cn.hncu.pattern.singleton.two.Single@2af081
转载地址:https://chenhx.blog.csdn.net/article/details/51044941 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月25日 08时20分31秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
美团Java面试154道题分享!
2019-04-29
花了一个星期,我终于把RPC框架整明白了!
2019-04-29
什么是容器云?
2019-04-29
大数据告诉你80、90后的真实负债
2019-04-29
基于大数据的Uber数据实时监控(Part 1:Spark机器学习)
2019-04-29
Java 性能调优的 11 个实用技巧
2019-04-29
HR问“你目前有几个offer”,聪明人会怎么说?
2019-04-29
阿里p8Java技术专家,他们的能力都需要达到什么程度?
2019-04-29
hadoop面试题!这6个!经常问!
2019-04-29
阿里、拼多多P8面试分享!
2019-04-29
Spring Cloud、K8S、Netflix OSS三者啥关系???
2019-04-29
Linux性能调优用这个“必杀技”,稳了!
2019-04-29
如何写出让同事无法维护的代码?
2019-04-29
微软某员工后悔跳槽阿里:工资才多20万不到,天天加班快崩溃!
2019-04-29
技术人员关注的几个优质公众号
2019-04-29
适用于任何数据可视化需求的国外10个最佳JavaScript图表库
2019-04-29
Elasticsearch如何做到亿级数据查询毫秒级返回?
2019-04-29
这26个阿里 Java 开源项目,你用过几个?
2019-04-29
基于大数据的Uber数据实时监控(Prat 3:使用Vert.x的实时仪表盘)
2019-04-29