先来说说模式的概念吧。
模式就是:具有代表性的某些重复问题的解决方案,是进过多次证实,与业务无关的方案。
它们都有特定的名称和适用的环境。模式的使用为我们带来了复用性的提高和可维护性的提高,同时可以增强表达能力。因为它是整个解决方案的总结。
一、模式的主要分类
模式分为两大类:设计模式和架构模式。
根据group of four 定义的23种模式和MVC模式,总共有24种。
其中设计模式又分为三小类:设计模式是系统局部出现的某一核心问题的解决方案
1.1创建型模式
创建模式:是用于创建对象。
包括单列、工厂、建造者、原型四种模式。
1.2结构型模式
结构模式:是用于组织类和对象之间关系的,形象的说就是对象间的组织形式。
包括桥梁、装饰器、适配器、外观、代理模式等。
1.3行为型模式
行为模式:是用于对象交换和职责分配的,形象的说就是方法的组织形式。
包括方法模板、策略、观察者、命令模式等。
另外架构模式是用于指导整个系统的整体的组织结构,规划,指南,用来组织预定义的职责分明的子系统。
二、创建模式
2.1单列模式singleton
顾名思义:这种设计模式是为了保证整个类只会产生一个对象,它是唯一的存在,通常用于独一无二的最高控制者。
在应用系统开发时,经常需要让系统管理一些软件内外部资源,这些内外部资源中有些只能有一个实例。
共有3种方法实现,各有不同的效果:
2.1.1预加载
构造方法私有,有一个静态属性是本身的一个对象。加载类时直接赋值构造一个对象。有静态方法可以获取该对象的引用。
//单例(态)模式一
//优点:线程绝对安全,多线程情况下不排队
//缺点:预加载导致不使用也产生了对象
//public class Singleton {
//
// //静态的对象,保证了全类共享一个对象
// private static Singleton instance;
//
// static{
// instance = new Singleton();
// }
//
// //私有的构造方法
// private Singleton(){
//
// }
//
// public static Singleton getInstance(){
// return instance;
// }
//
//}
2.1.2延时加载
构造方法私有,有一个静态属性是本身的一个对象。用一个静态同步方法来赋值,第一次调用给静态属性赋值,之后直接提取值。
//单例模式二
//优点:延迟加载(当真正需要对象的时候才产生)
//缺点: 多线程情况下要排队
//public class Singleton{
// private static Singleton instance = null;
//
// private Singleton(){
//
// }
//
// public synchronized static Singleton getInstance(){
// if(instance == null){
// instance = new Singleton();
// }
// return instance;
// }
//}
2.1.3高并发延时加载
构造方法私有,有一个静态属性是本身的一个对象。有一个静态方法给它赋值,代码块中使用双锁机制来控制。
//单例模式三(Java不支持)
//别名:双锁机制
//实现延迟加载、并支持高并发!
public class Singleton{
private static Singleton instance = null;
private Singleton(){
}
public static Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
re