软件设计模式——单例模式

我怎么感觉自己颓废了好久?明明只过了一个双十一哇…

大家好像很喜欢yolo的那两篇博客呢,深刻的感受到了人工智能时代的热潮~

还是跟大家交代一下叭,虽然呢yoloV3的教程过了很久,但是我们团队还是在用这个技术。不过现在没有再识别自行车了,而是商品识别(买了好多吃的,看着不能吃系列)。我有种写深度学习博客的冲动~喵呜
我好像又跑题了…
今天呢,写一写花花同学觉得很有用的一门课——软件设计模式。说实话,学到后面理解起来有一点点绕,总感觉上课的时候是懂了的。但可能因为没有完全理解,So真正到例题和项目里面就很混乱,觉得各种类的关系搞不清楚。

我在网上找了很多有关的教程,觉得菜鸟教程很不错哇!(是不是很惊讶,菜鸟教程还有设计模式)

单例模式

最最简单的单例模式例子就是,想象玩扫雷的时候点出来3个小窗口一起玩,但事实上系统不会允许这样的结果。第二次点击扫雷按钮,第一个窗口闪两下就完啦。这减少了内存的开销,避免了频繁的创建和销毁过程。(我感觉教材和专业教程估计会讲得清楚一些)

So我们直接来看看实例,菜鸟里面的例子我就不用了。感觉实验里的例子更有水平(更绕)一点,我们一起来看看吧~

题目

很多应用项目都有配置文件,这些配置文件里面定义一些应用需要的参数数据。
通常客户端使用这个类是通过new一个AppConfig的实例来得到一个操作配置文件内容的对象。如果在系统运行中,有很多地方都需要使用配置文件的内容,系统中会同时存在多份配置文件的内容,这会严重浪费内存资源。
事实上,对于AppConfig类,在运行期间,只需要一个对象实例就够了。那么应该怎么实现呢?

UML图

在这里插入图片描述

简单代码(我用的是饿汉模式)

AppConfig.java下:

public class AppConfig {
	private String ParameterA;
 	private static AppConfig instance = new AppConfig();
 	private AppConfig() {}
 	public static AppConfig GetAppConfig() {
 		 return instance;
 	}
 	public String GetParameterA() {
 		 return ParameterA;
 	}
 	public void SetParameterA(String ParameterA) {
  		this.ParameterA=ParameterA;
 	}
}

Singleton.java下:

public class Singleton {
 	public static void main(String[] args) {
  		AppConfig app1 = AppConfig.GetAppConfig();
  		AppConfig app2 = AppConfig.GetAppConfig();
  
  		app1.SetParameterA("hello");
  		app2.SetParameterA("world");
  
  		if(app1.equals(app2)) {
   			System.out.println("app1和app2是同一实例");
  		}else {
   			System.out.println("app1和app2是不同实例");
  		}
 		System.out.println(app1.GetParameterA());
  		System.out.println(app2.GetParameterA());
 	}
}

哇哦,今天的模式好简单哇~感动cry,总结一下啦:

单例模式重点在于构造函数的私有化和创建对象时的检测,类创建自己的对象,并且确保了只有单个对象被创建。

还有饿汉式的方法和双检锁啥啥的方法,下面写饿汉式的,双检锁的具体也就是用synchronized~

public class Singleton {  
	    private static AppConfig instance;  
	    private Singleton (){}  
  
	    public static AppConfig GetAppConfig() {  
		    if (instance == null) {
			instance = new AppConfig();
		    }
	return instance;  
	}  
}

今天是码代码花,看起来终于有点计算机系了~就是有点简单了,不符合我的水准(踢开)。
单例模式感觉不会有很大用,但是却是最好懂的一个模式了。啾咪~

猜你喜欢

转载自blog.csdn.net/Yvette_Lucifer/article/details/84036229