状态模式 State


State 模式当需要根据不同的状态定义不同的行为时 比较适合使用这种设计模式。public abstract class State { abstract void doSomething(); //不同的状态做一些不同的事情}用不同的状态实现类,去实现接口 或抽象类。

设计模式 模版模式template


模版模式template当有一套实现,我需要基于这套模版 修改部分实现时。可以使用模版模式实现这个抽象类,并修改部分实现。

设计模式 Memento备忘录


Memento备忘录记录操作行为每一步的过程,存盘(存档)动作。类似一个可恢复的快照通常的做法是把对象,持久化以便恢复,持久化需要实现序列化 实现Serializable 接口。

设计模式 原型模式


原型模式java 内置了原型模式实现Cloneable 接口 ,重写clone方法即可。对象如果嵌套 需要在子对象中也重写clone方法,否则会是浅拷贝。psjava17 record关键字/kt dataclass/scala case class yyds

适配器模式 & 桥接模式 & Command 命令模式


Adapter适配器模式类似于插座的转接头, 对应的是我们的方法当一个方法接受一个String 的入参,而我们手里的参数不是string,为了解耦可以有一个类专门做转换功能。当然如果结构简单 你也可以直接 toString。这里我觉得主要应用于比较复杂的对象结构。一下两个例子是比较典型的适配器模式。

设计模式 建造者模式 builder


建造者模式使用建造者模式 一次性构建出一个对象的所有属性。构建时使用链式的结构构建对象。通常的做法是在对象里使用内部类叫做build,把外部对象的属性作为方法声明出来并且有一个方法叫做build 返回对象本身。还有一个好处,举个例子我这里构建了一个Person 的类,我现在想更改他的年龄,但是不想修

设计模式 访问者模式 visitor


访问者模式当一个策略(比如价格策略)根据调用者而改变时。让不同的调用者对象实现接口,不修改访问的方法,而修改访问者。visitor 模式 适合的是结构固定的模型。

设计模式 代理模式


代理模式静态代理 基于组合 和 接口public interface ProxyInterface { void apply();}public class Base implements ProxyInterface { @Override public void apply()

java 设计模式 享元模式


享元模式通俗易通,共享元数据对象重复利用最好的例子是数据链接池,用的时候去池子里拿,用完还回去。

java 设计模式 观察者模式


观察者模式实现一在被观察的方法里,直接调用观察者的方法,实际业务场景中 传个表达式进来更灵活。实现二定义接口声明 被观察的动作,然后各个观察着去实现这个接口,定义行为。被观察者持有观察者的list,并在事件执行后调用他们。通常观察者包含三个内容 多个观察者以及其事件,被观察者,interface(声

java 设计模式 ChainOfResponsibility 责任链模式


责任链模式责任链模式,顾名思义主要应用场景为一步一步往下走,比如审核。public class Main { public static class HandlerDTO { private String msg; public HandlerDTO(String

java 设计模式 Decorator装饰器模式


Decorator感觉这个和ddd 的领域对象非常像订单刚开始比较简单只有购买人,物品信息等现在需要给订单添加优惠券信息,那么就把优惠券的对象 加到订单对象中,让订单对象持有优惠券对象。

java 设计模式 Mediator调停者和Facade门面


Facade模式门面模式其实就是封装,相当于提供的service 接口/rpc 接口我们会组装一系列行为在一个方法里,别人只需要调用我这个方法,或接口就可以了。Mediator调停者按照业务场景来说就是我们有一堆微服务,订单服务,支付服务,财务服务,审核服务,这些服务之间不做任何交互,而使用调停者服

java 设计模式 strategy 策略模式 && 工厂模式 && 模版模式


策略模式利用多态特性 根据不同的入参实现策略public static class Sort{ Integer sort(Integer i){} Integer sort(Double i){} Integer sort(Cat i){}}缺点很明显,有一堆重复代码,代码冗余严重。未完待续

java 设计模式 Singleton 的几种实现


简单实用的方法public class Singleton1 { private static final Singleton1 INSTANCE = new Singleton1(); private Singleton1() { System.out.println(&