我怎么感觉自己颓废了好久?明明只过了一个双十一哇…
大家好像很喜欢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;
}
}
今天是码代码花,看起来终于有点计算机系了~就是有点简单了,不符合我的水准(踢开)。
单例模式感觉不会有很大用,但是却是最好懂的一个模式了。啾咪~