设计模式:
反复使用、经过分类编目、代码设计经验、多数人知晓的总结。众多的软件开发人员在软件开发过程中面临的一般问题的解决方案。
借鉴前辈的套路,稍加变化,就可以完成构建了。
桥接模式、适配器模式、状态模式、抽象工厂模式、备忘录模式、工厂方法模式、代理模式、责任链模式、观察者模式、模板方法模式、策略模式、建造者模式、解释器模式、组合模式、享元模式、中介者模式、外观模式、单例模式、命令模式、访问这模式、迭代子模式、原型模式、装饰器模式。
关注对象创建过程的设计模式:创建型模式。
设计模式是基于场景的解决方案。
如果某个新场景的解决方案被认可,那我们就可以定义一个新的设计模式。
关注类和对象组合的模式:结构型模式。
关注对象之间的通信过程:行为型模式。
2.在计算机系统中,无论这台机器连接了多少台打印机,后台处理程序只有唯一的程序在工作。这样才不会出现,混乱的交错的情况。包括各种驱动程序,线程池,缓存,日志,很多时候都只需要有且只有一个实例在工作。
单例模式 目的:使得类的一个对象成为该类系统中的唯一实例。
定义:一个类有且仅有一个实例,并且自行实例化向整个系统提供。
要点:1.某个类只能有一个实例。2.必须自行创建实例 3.必须自行向整个系统提供这个实例。
实现:
1.只提供私有的构造方法。(限制了在类外实例化对象的渠道)。
2.含有一个该类的静态私有对象。
3.提供一个静态的公有方法用于创建、获取静态私有对象。
代码实现:
饿汉式:对象创建过程中实例化。
package com.immoc.singleton;
public class SingleTonOne {
// 1.创建类中私有构造
private SingleTonOne() {
}
// 2.创建该类型的私有静态实例
private static SingleTonOne instance = new SingleTonOne();
// 3.创建公有静态方法返回静态实例对象
public static SingleTonOne getInstance() {
return instance;
}
}
在测试类用new关键字实例化发现报错,原因是此类构造方法被私有化了:

调用类的getInstance方法 典型的空间换时间:在类加载的时候,就完成了实例化操作。不管你用或者不用先建在那里直接拿。相对而言速度快,空间大。
package com.immoc.test;
import com.immoc.singleton.SingleTonOne;
public class Test {
public static void main(String[] args) {
SingleTonOne singleTonOne = SingleTonOne.getInstance();
SingleTonOne singleTonTwo = SingleTonOne.getInstance();
System.out.println(singleTonOne==singleTonTwo); //true
}
}
懒汉式:静态公有方法中实例化。 (只有在用到的时候才会进行实例化的创建操作)
package com.immoc.singleton;
// 懒汉式:类内实例对象创建时并不初始化,直到第一次调用get方法时,才完成初始化操作
public class SingleTonTwo {
// 1、创建私有构造方法
private SingleTonTwo() {
}
// 2.创建静态的该类实例对象
private static SingleTonTwo instance = null;
// 3.创建开放的静态方法提供实例对象
public static SingleTonTwo getInstance() {
if(instance==null) {
instance=new SingleTonTwo();
}
return instance;
}
}
测试类:结果也是true。时间换空间。
SingleTonTwo singleTon = SingleTonTwo.getInstance();
SingleTonTwo singleTon2 = SingleTonTwo.getInstance();
System.out.println(singleTon==singleTon2); //true


单例模式:
优点:1.在内存中只有一个对象,节省内存空间。
2.避免频繁的创建销毁对象造成的性能损耗,提高性能。
3.避免共享资源多重占用。
缺点:
1.扩展比较困难。
2.如果实例化后的对象长期不利用,系统将默认为垃圾进行回收,造成对象状态丢失。

来源:oschina
链接:https://my.oschina.net/u/4446873/blog/4886042