zoukankan      html  css  js  c++  java
  • java软件设计模式只单例设计模式

    概述

    设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

    设计模式分为三种类型,共23种
    创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
    结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。

    行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

    今天我们来看一下第一个单例模式的例子。

    有时候我们服务器的访问量巨大的时候,使用普通的类方法为每一个访问的用户创建一个对象,而提供的功能大体相同时,就会极大的占据服务器的存储空间,同时损耗CPU,这个时候,我们就希望在服务器中只存在一个对象供所有的方法调用,这就是单例设计模式。

    单例设计模式分为两种:

    1. 饿汉设计模式  
    2. 懒汉设计模式

      我们先来看看饿汉设计模式,先看一下实例

      

    /**
     * @author MyPc 单例设计模式
     */
    class Test {
    
    	static Test test = new Test();
    
    	// 私有化构造方法
    	private Test() {
    		System.out.println("这是单例设计模式");
    	}
    
    	public static Test getTest() {
    
    		return test;
    	}
    	
    	//main方法
    	public static void main(String[] args) {
    
    		Test t1 = Test.getTest();
    		Test t2 = Test.getTest();
    		if(t1 == t2){
    			System.out.println("對象相同");
    		}
    	}
    }
    

      在这个单例设计设计模式中,我们能够看到一个很重要的一步,就是私有化构造方法。

      我们知道在new一个类对象时,会同时调用该类的构造方法,所以默认情况构造方法是public型的,在单例设计模式中,我们将类的构造方法设为private,就会让别的类无法创建该类的对象,同时我们在该类的内部创建一个静态的该类的自己的对象,并向外提供一个静态的方法调用这个对象,这样就能保证该类的对象始终只有一个。这就是饿汉单例模式,下面我们再看一下懒汉单例模式:

    /**
     * @author MyPc 单例设计模式
     */
    class Test {
    
    	static Test test;
    
    	// 私有化构造方法
    	private Test() {
    		System.out.println("这是单例设计模式");
    	}
    
    	public static Test getTest() {
    		if(test == null){
    			test = new Test();
    		}
    		return test;
    	}
    	
    	//main方法
    	public static void main(String[] args) {
    
    		Test t1 = Test.getTest();
    		Test t2 = Test.getTest();
    		if(t1 == t2){
    			System.out.println("對象相同");
    		}
    	}
    }
    

      相比较饿汉单例模式,饿汉单利模式会存在一个问题,那就是始终会在内存中存在这个对象,不管有没有使用,如果没有使用的话也会造成资源的浪费,这时候懒汉设计模式在单线程下就能避免这个问题,我们能够看到实例中我们一个开始并没有创建对象,只是声明了一下该类的对象,在需要具体调用时再判断是否已经存在该类的对象了,如果存在,返回对象,如果不存在,new一个该对象再返回。

      单例设计模式在某些情况能够极大的节省资源,非常适合访问量大的网站使用。

  • 相关阅读:
    268. Missing Number
    Java中Synchronized的用法
    构造器里面的super()有什么用?到底写不写?
    android studio快速导入其他人的项目,避免下载gradle长时间卡住
    开发中遇到的问题---【Feign远程调用时,@PathVariable 注解中的value属性不能省略】
    我爱java系列---【次日凌晨00:00:00生效】
    开发中遇到的问题---【feign的多参数问题】
    我爱java系列---【springboot中分页插件pagehelper自定义返回结果类型】
    开发中遇到的问题---【当类型设置为Integer时,传入的值为0,会将其转化为空字符串,从而造成查询数据异常】
    我爱java系列---【mysql中的数据类型和java中的数据类型的对应】
  • 原文地址:https://www.cnblogs.com/it-life-nathan/p/6821253.html
Copyright © 2011-2022 走看看