设计模式分为创建型、结构型、行为型
创建型:简单工厂、工厂方法、抽象工厂、单例、建造、原型
结构型:适配器、合成、装饰者、代理、FlyWeight(享元模式)、外观、桥接、不变
行为型:策略、模板方法、观察者、迭代器、责任链、命令、状态、访问者、解释器、调停者
简单工厂模式
优点:简单
缺点:具体产品繁多时,创建责任集种在1个工厂中,维护压力大
开闭原则:不太符合开闭原则(仅对使用工厂的client代码符合开闭),每增加1个具体产品就要修改工厂代码
工厂方法模式
工厂方法故名思意是把抽象的方法由子类实现,跟模板方法类似
优点:弥补了简单工厂职责过重和不符合开闭原则的缺点
这个模式client在选择使用哪个工厂的问题时,完全可以以产品+Factory的名称先获取工厂来创建产品
抽象工厂模式
该模式是在工厂方法的基础上支持产品族,该模式的核心思想就是同族产品是配套使用的
开闭原则:增加新的产品族,则需要对工厂增加对应的create方法,这符合开闭原则;
增加产品等级,对工厂而言需要增加对应的工厂等级,符合开闭,但
Client就需要感知新的工厂,这一点可以使用技术方法避免修改client,算一般符合
单例模式
建造模式
原型模式
对象克隆,不做过多描述
适配器模式
适配器模式、装饰者模式、代理模式的类图相似,但思想不同
合成模式
装饰者模式
适配器模式、装饰者模式、代理模式的类图相似,但思想不同
代理模式
适配器模式、装饰者模式、代理模式的类图相似,但思想不同
FlyWeight模式
又称享元模式、轻量模式
该模式用于大量轻量对象的共享,实际上是一种对多实例的工厂
有2个概念,内蕴是工厂内部管理对象,外蕴是给client用的
外观模式
桥接模式
桥接模式不直接使用目标接口,而是在中间加一层包装、转化,来使两端解耦
不变模式
不变模式是对方法、字段的不可变
例如String类
策略模式
模板方法模式
观察者模式
迭代器模式
迭代器模式相当于向迭代器进行适配
责任链模式
责任链模式有很多灵活的变种,例如javax.servlet.FilterChain、org.springframework.web.servlet.HandlerExecutionChain
命令模式
命令的发出者和接收者解耦,使得两者可以随意组合
状态模式
状态模式与策略模式的类图一样,但思想不同,另外在使用时如果上下文中需要根据变量进行对应的切换应该属于状态模式
访问者模式
解释器模式
调停者模式
与观察者模式有相似之处