设计模式分三种:创建型、结构型、行为型
1、简单工厂模式、工厂模式、抽象工厂模式
简单工厂:工厂-》产品
工厂:抽象工厂-》工厂1-》产品1
-》工厂2-》产品2
抽象工厂:抽象工厂-》工厂1-》抽象产品-》产品1/产品2
2、建造者模式
创建型模式
结构:
抽象建造者:abstract class ActorBuilder
具体建造者:HeroBuilder extends ActorBuilder、DevilBuilder
产品:Actor游戏角色类,充当产品
指挥者:ActorController 角色控制器,在这里调用具体建造者的方法。
优点:每个建造者相对独立,方便添加/替换,且调用者不必直到产品内部组成的细节,将产品本身和产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象
缺点:如果产品的内部变化复杂,可能需要定义很多具体的建造者来实现这种变化,会导致系统变得很庞大
建造者模式的产品需要有较多共同点,组成部分相似,使用范围受到限制
3、单例模式
创建型模式
确保一个类只有一个实例,供全局访问
饿汉式、懒汉式(双重检查锁,synchronized+volatile
优点:节约系统资源、
缺点:不可扩展
4、适配器模式
5、代理模式
6、责任链模式
行为型模式
结构:
Handler抽象处理者
concreteHandler 具体处理者
上家会在自己的代码里维持对下家的引用
优点:在系统中增加一个新的具体处理者无需修改原有系统的代码,只需要修改链条即可,符合开闭原则
缺点:如果建链不当,可能出现循环调用,
7、观察者模式
对象和对象之间的依赖关系,一个对象发生改变时,自动通知其他对象
也可以叫发布-订阅者模式
Event、Listener、Publisher
优点:
可以解耦,简化一对多的难度
缺点:
如果观察者很多,一个个通知可能很浪费时间,
8、策略模式
通过继承和多态,
让每个算法之间可以互相替换,
Context环境类
Strategy抽象策略类
ConcreteStrategy:具体策略类
优点:
避免多重if-else
可以灵活地增加新的策略/算法
缺点:
调用者必须直到所有的策略类,并自行决定使用哪个策略
9、模板方法模式
定义一个操作中算法的框架,将一些步骤的实现放到子类中。
优点:代码复用
反向控制,可以通过子类覆盖父类的钩子方法来决定是否执行某一步骤
更新/增加新的子类很方便
其他:桥接模式、组合模式、装饰模式、外观模式、享元模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、状态模式、访问者模式