设计模式_抻透

定义:设计模式是一套代码设计经验总结。
目的:为了代码可重用性,可靠性。

常用模式

  • 创建型:工厂抽象工厂单例、建造者、原型
  • 结构型:适配器装饰器代理、外观、桥接、组合、享元
  • 行为型:策略模板方法观察者、迭代子、责任链、命令、备忘录、状态、访问者、中介、解释器

常用模式详解

1、单例模式
活动的单例只有一个实例,确保所有对象都访问同一个实例;

实现方式 优点 缺点
懒汉式(线程不安全) 实现简单 不支持多线程
懒汉式(线程安全) 第一次调用才初始化,避免内存浪费 加锁影响效率
饿汉式 支持多线程,没有加锁,执行效率高 类加载时就初始化,浪费内存;容易产生垃圾对象
双检锁 采用双锁机制,在多线程情况下保持高性能 实现较为复杂
静态内部类 实现简单;能够达到双检锁一样的功能 只适用于静态域情况
枚举 实现单例模式的最佳方法,简洁;自动支持序列化机制,防止多次实例化 不能通过 reflection attack 来调用私有构造方法
  • 饿汉式
public class Singleton{
	private static Singleton instance = new Singleton();
	private Singleton(){};
	public static Singleton getInstance(){
		return instance;
	}
}

访问方式

Singleton instance = Singleton.getInstance();
  • 双检锁
public class Singleton{
	private volatile static Singleton singleton;
	private Singleton(){}
	public static Singleton getSingleton(){
		if(instance==null){
			synchronized(Singleton.class){
				if(instance==null){
					instance=new Singleton();
				}
			}
		}
	return instance;
	}
}

访问方式

Singleton instance = Singleton.getInstance();
  • 枚举
public enum SingletonEnum{
	instance;
	private SingletonEnum(){}
	public void method()
	}
}

访问方式

SingletonEunm.instance.method();

2、抽象工厂模式
围绕超级工厂创建其他工厂。就是提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类。

3、代理模式
一个类代表另一个类的功能,具体是创建具有现有对象的对象,以便向外界提供功能接口。

  • 使用场景:远程代理,虚拟代理等

4、观察者模式

对象间存在一对多关系时,即当一个对象被修改时,所有依赖对象得到通知并自动更新。

猜你喜欢

转载自blog.csdn.net/weixin_43944004/article/details/89259704