设计模式(design pattern),是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案,是九十年代从建筑设计领域引入到计算机科学的
设计模式的目的,是为了让程序(软件)具有更好的代码重用性、可读性、可扩展性、可靠性、使程序呈现高内聚、低耦合的特性
设计模式遵循的七大原则:单一职责原则、接口隔离原则、依赖倒置原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则
1、单一职责原则,可以是类级别的,一个类只负责一项职责,可以是方法级别的,一个方法负责一项职责,只有类中方法数量足够少,可以在方法基本保持单一职责原则
2、接口复杂的可以拆分成多个不同的接口,类分别与它们需要的接口建立依赖关系,就是接口隔离原则
设计模式分三种类型,共23种:
1、创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式
2、结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
3、行为型模式:模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责模式
23种设计模式之模式释义
一、创建型模式
单例模式,只创建一个类的实例(类对象)
1) 保证线程安全,保证懒加载的方法之一双重检查
public class SingletonTest06 { public static void main(String[] args) { System.out.println("双重检查"); Singleton instance = Singleton.getInstance(); Singleton instance2 = Singleton.getInstance(); System.out.println(instance == instance2); // true System.out.println("instance.hashCode=" + instance.hashCode()); System.out.println("instance2.hashCode=" + instance2.hashCode()); } } // 懒汉式(线程安全,同步方法) class Singleton { private static volatile Singleton instance; private Singleton() {} //提供一个静态的公有方法,加入双重检查代码,解决线程安全问题, 同时解决懒加载问题 //同时保证了效率, 推荐使用 public static synchronized Singleton getInstance() { if(instance == null) { synchronized (Singleton.class) { if(instance == null) { instance = new Singleton(); } } } return instance; } }
2) 保证线程安全,保证懒加载的方法之一静态内部类
3) 保证线程安全,保证懒加载的方法之一枚举类
4) 保证线程安全,保证懒加载的方法之一饿汉模式
单例模式保证了系统内存中只存在一个对象,使用场景为:需要频繁创建销毁的对象,创建对象耗时或耗资源,但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象
二、结构型模式
类适配器模式,Adapter类,通过继承scr类,实现dst类接口,完成src->dst的适配
对象适配器模式,基本思路和类的适配器模式相同,只是将Adapter类作了修改,不是继承src类,而是持有src类的实例,以解决兼容性的问题,即:持有scr类对象,实现dst类接口,完成src->dst的适配
接口适配器模式,当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类(可采取匿名内部类)可有选择地覆盖父类的某些方法来实现需求
三、行为型模式
模板方法模式(模板模式),在一个抽象类公开定义了执行它的方法的模板(确定了除了模板方法的其他方法的执行顺序结构 ),它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行(执行模板方法)
模板模式的钩子方法(抽象类),钩子方法什么也不做,在抽象类的子类,视需要重写钩子方法
命令模式,为了消除发送者与接收者之间的耦合,在两者之间设定一个命令执行接口(可以发送命令,可以解除命令),发送者聚合接口,接收者聚合接口实现,接收者通过接口与发送者产生联系
策略模式,核心思想是,多用组合/聚合,少用继承,用行为类组合,而不是行为的继承;关闭修改,开放扩展,增加行为不修改代码;每增加一个策略就要增加一个类,策略过多导致类数目庞大;策略模式定义算法族,分别封装起来,让它们之间可以替换, 算法的变化独立于使用算法的客户
具体实现:定义若干行为接口,每个接口由不同的行为的类继承并实现接口;客户类聚合行为接口(作为客户类属性),产生行为的多态和行为的多样性
职责链模式,也叫责任链模式,为请求创建一个接收者对象的链,目的对请求的发送者和接受者进行解耦;每个接收者都包含对另一个接收者的引用,不能处理会把请求传给下一个接收者;发送者不需要知道由哪个接收者处理,由接收者链处理
具体实现:创建一个抽象类,该类的一个属性包含该类的一个引用,用于指向下一个类对象(设计一个set方法指向下一个职责的类对象 ),同时包含处理发送者请求的抽象函数处理请求,有若干不同职责的类(分别处理不同请求)继承该抽象类并实现处理函数;使用时,创建一个发送者类对象,创建若干不同职责的类对象,这些不同职责类对象以职责形成一个环链(调用set方法,传下一个职责类对象);无论把发送者对象传递给任何一个职责对象(职责对象调用处理函数,函数的参数是发送者对象),该发送者对象都会被处理