# design-patterns **Repository Path**: wang-hai-cheng/design-patterns ## Basic Information - **Project Name**: design-patterns - **Description**: 设计模式4j - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-05-01 - **Last Updated**: 2021-05-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 多用接口的方法调用来实现组合替换继承的功能 组合大于继承 模式是在某情景下,针对某问题的某种解决方案 如果你现在不需要,就别使用设计模式 策略模式 核心在于组合,鸭子的实体类本身没有叫和飞的具体实现,它的具体实现是通过从其它位置拿飞和叫的功能类过来,完成鸭子的飞和叫功能.整个鸭子是组合而得来的. 观察者模式 类似于主题,观察者核心是Subject接口以及它的具体实现类WeatherData,负责注册,移除,通知观察者,当Subject有数据更新时,通知所有注册过来的观察者 装饰模式 核心在于装饰,装饰类和被装饰类实现同一接口,装饰类内部包含被装饰类,装饰类实例化时,将被装饰类赋值进去.装饰类重写方法时,在被装饰类的方法执行基础上再加上自己装饰的东西 简单工厂 将创建实例的代码封装到工厂中,需要实例时只需要传入类型,工厂就可以生成指定实例返回 工厂方法 把class变成abstract class,就可以把原来普通的方法变成abstract方法,然后其它子类继承这个abstract class时就可以自定义这个abstract方法, 如果这个抽象方法是用来自定义创建实例的,那么这就是工厂方法的核心且具体的实践操作 抽象工厂 生产多个产品家族的工厂,就是抽象工厂的实践操作(简单工厂和工厂方法只生产一种产品) 工厂方法与抽象工厂的区别: 工厂方法用的方法是继承,抽象工厂是组合 抽象工厂提供一个用来创建一个产品家族的抽象类型,这个类型的子类定义了产品被产生的方法,要想使用这个工厂,必须先实例化它,然后将它传入一些针对抽象类型所写的代码中 单例模式 私有化构造方法! 饿汉式:直接创建出实例,需要的时候直接调用get方法即可 懒汉式:在需要的时候创建出对象,原理是调用静态内部类的new时,会先加载父类,而加载父类的时候是同步加锁的 命令模式 封装方法调用,命令的调用者不需要知道自己调用的具体是哪个命令,只需要将命令功能载入自己的实例中,自己调用自己的固定方法即可 如:遥控器使用不同功能时载入不同厂家的命令功能,客户只需要按相同的按键就可以执行不同的操作,比如开关灯,开关车库等 适配器模式(仅对象适配器,其实还有一种类适配器,但是需要多继承,java不支持) target:要适配成的目标 target:被包装的适配源实例 适配器实现target的接口类,且内部包含一个origin,适配器调用与target相同的方法时,调用origin相似的方法,这样origin就被适配成了target对象 客户和被适配者是解耦的,一个不知道另一个 适配器与装饰者 适配器是implements适配目标的接口类.装饰使用的是extends装饰者类,装饰者类还要继承被装饰者的接口类 适配器要实现所有方法 装饰者只需要装饰部分或全部方法 外观模式 简化接口的模式,只显露出一个干净美好的外观 模板方法 将子类相同或类似的方法抽象到父类中,父类用一个模板方法定义一个算法的骨架,并允许子类为一个或多个步骤提供实现. 迭代器与组合模式 迭代器模式 实现Iterator即可,如果没有这个接口,自己定义一个这个接口就行 组合模式 将对象组合成树形结构来表现"整体/部分"层次结构 状态模式 在变更状态时,更换State接口的子类实例来更换各个方法功能,实现不同状态同样的方法有不同的算法表现 状态模式与策略模式 主要在于意图不同: 状态模式->将一群行为封装在状态对象中,上下文的行为随时可委托到那些状态对象中的一个,随着时间的流逝,当前状态在状态对象集合中游走改变,客户几乎感觉不到 策略模式->通常客户主动指定上下文所要组合的策略对象的哪一个 代理模式 代理对象与目标对象实现同一接口,代理对象内包含目标对象,调用同一接口时,代理模式会加上自己的动作 代理模式与装饰者 代理->控制对象的访问,保护对象避免不想要的访问,会加上自己的动作 装饰->装饰对象,改变原对象的动作 复合模式 模式的模式,结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题 其它设计模式 桥接 不止改变你的实现,也改变你的抽象 生成器 封装一个产品的构造过程,并允许按步骤构造 责任链 当你想要让一个以上的对象有机会能够处理某个请求的时候,就使用责任链模式 蝇量 想让某个类的一个实例能用来提供需要"虚拟实例",就使用蝇量模式 解释器 使用解释器模式为语言创建解释器 中介者 集中相关对象之间复杂的沟通和控制方式 备忘录 需要让对象返回之前的状态时,就使用备忘录模式 原型 当创建给定类的实例的过程很昂贵或很复杂时,就使用原型模式 访问者 想要为一个对象的组合增加新的能力,且封装并不重要时,就使用访问者模式 建造者模式 当一个类的构造函数参数超过4个,而且这些参数有些是可选的参数,考虑使用建造者模式