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

设计模式学习概述:
为什么要学习设计模式
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@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

第二种方法:

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<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);
    }

}

测试结果:

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
时间: 2024-10-26 02:12:02

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

Java单例进化史

关于单例,从我学Java到现在只知道以下两点: 1.为了让一个类只能有一个实例,所以使用单例的设计模式. 2.有两种实现方法:①饿汉式 ②懒汉式 ①饿汉式简单,是线程安全的.但是在类加载时就创建了一个实例,但是这个单例类可能永远不会被使用,这就造成了浪费.而且类被加载器加载时就会实例化一次.这就有可能被实例化多次. public class Singleton { private static final Singleton INSTANCE = new Singleton(); private

java-一般网站设计分为哪几个模块?

问题描述 一般网站设计分为哪几个模块? 网站设计分为哪几个模块?关于旅游的驴友网站.越详细越好, .. 解决方案 简单的来说就是前台,后台和数据库 解决方案二: 前台设计.后台开发.数据处理 解决方案三: 前台界面:登录.注册.主界面.子界面.设置等等,前台界面功能的实现,后台管理员界面:登录.注册.管理.设置等等.还有后台功能的实现.最后还有就是数据库,你可以去找找一些JavaWeb的书来看看,用MVC模式来做... 解决方案四: 最主要的就是设计,然后是代码实现 解决方案五: 那看你是做什么

stringbuilder-这部分程序的模块设计是哪些

问题描述 这部分程序的模块设计是哪些 package Blog; import java.util.Date; import java.util.Scanner; import javax.swing.*; public class blogTryProject{ //找出基因 public static void main(String[]args){ Scanner input = new Scanner(System.in); System.out.print("Enter a genom

框架模块设计经验总结

  三个月没写日志了,比较懒散--下半年准备做OEA 的 B/S 版本,比较复杂,需要从架构设计开始认真入手.正好今天到了部门反思的时间,今天先把原来的一些设计经验总结一下,以方便将来回顾.     直入主题,这篇日志主要用于总结一些框架级别的模块设计经验.   总述       一个大型的框架,必然由多个较独立的子系统/子模块构成.这些子模块如何交互,之间的接口如何定义,这是框架的架构设计的问题.而今天我主要要总结一下,针对其中的某一个子模块,应该如何进行设计.(例如,在 OEA 中有这些相对

E-PON中的ONU用收发一体模块设计

摘要:本文介绍了E-PON(以太无源光网络)系统对ONU(光网络单元)收发一体模块的技术要求以及ONU收发一体模块的基本原理和设计方法,并给出了实验结果. 关键词:E-PON:ONU:突发:收发一体模块:BiDi 1.前言 随着信息社会的快速发展,人们对信息的依赖程度越来越高,对信息量的需求越来越大.Internet业务的普及和发展为人们提供了一种优良的信息获取和交流的平台:此外,随着人们对以高清晰度电视为代表的高带宽信息的需求越来越大,新型的宽带传输技术将越来越多的替代传统的窄带传输技术.在这

电子商务网站商品评价模块设计

对于消费者而言,要买一样商品,或多或少都会受到他人的影响,各种各样的信息聚合在消费者的脑中,它们共同影响了一单交易的发生.这其中很重要的一类信息就是别人的商品评价. 商品评价是很常见的电商网站的功能模块.让我们来看看商品评价都有什么样的信息结构. 商品评价大致分两类,一类是商品评分,现在一般是五颗星的打分标准,另一类是商品评论,主要由消费者的评论组成. 一.商品评分 评分通常是用五颗星来快速打分,用户的操作很直观,不需要给出具体的分数,直接点击星即可. 从打分的过程来看,可以把星级细化,分为好评

电商网站商品评价模块设计

对于消费者而言,要买一样商品,或多或少都会受到他人的影响,各种各样的信息聚合在消费者的脑中,它们共同影响了一单交易的发生.这其中很重要的一类信息就是别人的商品评价. 商品评价是很常见的电商网站的功能模块.让我们来看看商品评价都有什么样的信息结构. 商品评价大致分两类,一类是商品评分,现在一般是五颗星的打分标准,另一类是商品评论,主要由消费者的评论组成. 一.商品评分 评分通常是用五颗星来快速打分,用户的操作很直观,不需要给出具体的分数,直接点击星即可. 从打分的过程来看,可以把星级细化,分为好评

php-PHP模拟用户登录模块设计

问题描述 PHP模拟用户登录模块设计 初学者,遇到下面问题,求帮助! 1.模拟用户登录模块,具体要求如下: (1).创建一个用户登录的表单页面. (2).对用户输入的信息进行二次验证,即在客户端进行输入格式验证(如用户名不能为空,密码至少6位等),在服务器端进行用户名和密码的匹配验证(可以假设一个用户名和密码). (3)根据不同的验证结果给用户合理的反馈. 解决方案 这是个问题么.... 解决方案二: 不明白问题是什么..

关于多个javaweb的引用单独模块设计请教!!!

问题描述 关于多个javaweb的引用单独模块设计请教!!! 有这么个场景,同时在开发几个网站,其中有些模块是可以单独出来的项目来响应请求与本身逻辑的处理,这点好做到. 单独模块会有自己的表.实体类. 但如果这个单独的模块同时被几个网站引用到,而有其中一个网站的表需要新增几个字段,或者在弄一张表关联这类的. 在不影响其他网站引用这模块的基础上 有什么好的办法解决?我用的是 maven 管理 dao层 hibernate. 可能我讲的不怎么清晰,我在线的,随时等候回复,谢谢拉.