图解设计模式
思维的深度
这个作者很懒,什么都没留下…
展开
-
设计模式——工厂方法模式
工厂方法模式总结如下(可点击放大):示例:原创 2021-12-09 21:23:23 · 121 阅读 · 0 评论 -
设计模式——抽象工厂模式
抽象工厂模式总结如下图(可点击放大):示例:原创 2021-12-09 20:28:11 · 337 阅读 · 0 评论 -
设计模式——原型模式
原型模式总结如下:示例:public class Client { public static void main(String[] args) { ConcretePrototype1 p1= new ConcretePrototype1("I"); ConcretePrototype1 c1 = (ConcretePrototype1)p1.clone(); System.out.println(c1.getId()); }}原创 2021-12-07 08:24:23 · 87 阅读 · 0 评论 -
设计模式——模板方法模式
模板方法模式示例:public class Test { public static void main(String[] args) { Game game = new BasketballGame(); game.play(); System.out.println("=================================="); Game game1 = new Football();原创 2021-12-07 08:24:46 · 400 阅读 · 0 评论 -
设计模式——外观模式(门面模式)
外观模式总结如下:示例:public class Facade { SubSystemOne systemOne; SubSystemTwo systemTwo; SubSystemThree systemThree; SubSystemFour systemFour; public Facade() { systemOne = new SubSystemOne(); systemTwo = new SubSyste.原创 2021-12-07 08:25:06 · 88 阅读 · 0 评论 -
设计模式——建造者模式
建造者模式总结如下图(可点击放大):示例:public class Client { public static void main(String[] args) { Builder builder = new ConcreteBuilder(); Director director = new Director(builder); Product product = director.construct(); pr.原创 2021-12-07 08:24:32 · 92 阅读 · 0 评论 -
设计模式——观察者模式
观察者模式总结如下(可点击放大):示例:public class ObserverPattern { public static void main(String[] args) { Subject subject = new ConcreteSubject(); Observer observer1 = new ConcreteObserver1(); Observer observer2 = new ConcreteObserver.原创 2021-12-07 08:25:12 · 106 阅读 · 0 评论 -
设计模式——简单工厂模式
简单工厂模式总结如下图(可点击放大):示例:public class Client { //抽象产品 public interface Product{ void show(); } //具体产品, ProductA static class ConcreteProduct1 implements Product { @Override public void show() { .原创 2021-12-07 08:25:28 · 394 阅读 · 0 评论 -
设计模式——状态模式
状态模式总结如下(可点击放大查看):示例://状态模式public class StateClient { public static void main(String[] args) { State initState = new ConcreteState1(); Context context = new Context(initState); context.handle(); //处理请求 context.h原创 2021-12-07 08:25:40 · 96 阅读 · 0 评论 -
设计模式——备忘录模式
备忘录模式总结如下图(可点击放大):UML结构图如下:示例:public class MementoClient { public static void main(String[] args) { Originator or = new Originator(); Caretaker caretaker = new Caretaker(); or.setState("S0"); System.out.pr...原创 2021-12-07 08:25:50 · 210 阅读 · 0 评论 -
设计模式——组合模式(图)
组合模式总结如下图(可点击放大):UML结构图如下:安全模式:透明模式:示例:public class CompositeClient { public static void main(String[] args) { Component c0 = new Composite(); Component c1 = new Composite(); Component leaf1 = new Leaf("1")...原创 2021-12-07 08:26:22 · 322 阅读 · 0 评论 -
设计模式——迭代器模式(图)
迭代器模式总结如下图(可点击放大):UML结构图:示例:public class IteratorTest { public static void main(String[] args) { Aggregate aggregate = new ConcreteAggregate(); aggregate.add("清华大学"); aggregate.add("北京大学"); aggregate.add("浙江..原创 2021-12-06 18:42:09 · 237 阅读 · 0 评论 -
设计模式——单例模式(图)
单例模式总结如下图(可点击放大):UML结构图饿汉模式该模式的特点是类一旦加载就创建一个单例,保证在调用 getInstance 方法之前单例已经存在了。示例:public class HungrySingleton { private static HungrySingleton hungrySingleton = new HungrySingleton(); //构造器私有化 private HungrySingleton(){ }..原创 2021-12-06 18:38:04 · 688 阅读 · 0 评论 -
设计模式——桥接模式(图)
桥接模式总结如下图(可点击放大):UML结构图如下:示例:public class BridgeTest { public static void main(String[] args) { Implemetor implemetor1 = new ConcreteImplemetorA(); Implemetor implemetor2 = new ConcreteImplemetorB(); Abstraction ..原创 2021-12-06 18:33:00 · 586 阅读 · 0 评论 -
设计模式——命令模式(图)
命令模式总结如下:UML结构图通俗理解:(摘自网上http://c.biancheng.net/view/1383.html)Command:请求封装成的对象,该对象是命令模式的主角。也就是说将请求方法封装成一个命令对象,通过操作命令对象来操作请求方法。在命令模式是有若干个请求的,需要将这些请求封装成一条条命令对象,客户端只需要调用不同的命令就可以达到将请求参数化的目的。将一条条请求封装成一条条命定对象之后,客户端发起的就是一个个命令对象了,而不是原来的请求方法!Receive...原创 2021-12-06 18:30:12 · 456 阅读 · 0 评论 -
设计模式——责任链模式(图)
责任链模式总结如下(可点击放大):UML结构图如下:示例:public class ChainTest{ public static void main(String[] args) { Handler handler1 = new HandlerImpl1(); Handler handler2 = new HandlerImpl2(); handler1.setNext(handler2); handle..原创 2021-12-06 18:24:44 · 769 阅读 · 0 评论 -
设计模式——中介者模式(图)
中介者模式总结如下(可点击放大):UML结构图如下:示例:public class MediatorTest { public static void main(String[] args) { Mediator mediator = new ConcreteMediator(); Colleague c1 = new ConcreteColleague1(); Colleague c2 = new ConcreteColle..原创 2021-12-06 18:19:23 · 311 阅读 · 0 评论 -
设计模式——享元模式(图)
享元模式的总结如下图(可点击放大):UML结构图如下:示例:public class FlyweightTest { public static void main(String[] args) { FlyweightFactory factory = new FlyweightFactory(); Flyweight f1 = factory.getFlyweight("a"); Flyweight f2 = factory..原创 2021-12-06 18:16:09 · 166 阅读 · 0 评论 -
解释器模式(图)
解释器模式相关总结如下图(可点击放大):结构图如下:示例:public class InterpreterTest { public static void main(String[] args) { Context bus = new Context(); bus.freeRide("杭州的老人"); bus.freeRide("南京的年轻人"); bus.freeRide("上海的儿童"); .原创 2021-12-06 18:11:57 · 213 阅读 · 0 评论 -
访问者模式(图)
访问者模式总结图如下:示例:public class VisitorTest { public static void main(String[] args) { ObjectStructure os = new ObjectStructure(); os.add(new ConcreteElementA()); os.add(new ConcreteElementB()); Visitor visitor1 = n.原创 2021-12-06 17:59:30 · 118 阅读 · 0 评论 -
面向对象常用的设计原则(图)
常用的设计原则有:开放-封闭原则、迪米特法则、合成/聚合复用原则、单一职责原则、里氏代换原则和依赖倒转原则等。原创 2021-12-06 17:52:45 · 69 阅读 · 0 评论 -
策略模式详解
在策略模式中,我们会将每个算法单独封装成不同的算法实现类(这些算法实现类都实现了相同的接口),每个算法实现类就可以被认为是一种策略实现,我们只需选择不同的策略实现来解决业务问题即可,这样每种算法相对独立,算法内的变化边界也就明确了,新增或减少算法实现也不会影响其他算法。如下是策略模式的核心类图,其中 StrategyUser 是算法的调用方,维护了一个 Strategy 对象的引用,用来选择具体的算法实现。示例:public inter...原创 2021-09-07 21:10:32 · 210 阅读 · 0 评论 -
模板方法模式
模板方法模式会将模板方法以及不需要随业务场景变化的基本方法放到父类中实现,随业务场景变化的基本方法会被定义为抽象方法,由子类提供真正的实现。下图展示了模板方法模式的核心类,其中 template() 方法是我们上面描述的模板方法,part1() 方法和 part3() 方法是逻辑不变的基本方法实现,而 part2()、part4() 方法是两个随场景变化的基本方法。我们可以通过模板方法控制整个流程的走向以及其中固定不变的步骤,子类来实现流程的某些变化细节,这就实现了“变...原创 2021-09-07 21:06:05 · 70 阅读 · 0 评论 -
构造者模式
构造者模式最核心的思想就是将创建复杂对象的过程与复杂对象本身进行拆分。通俗来讲,构造者模式是将复杂对象的创建过程分解成了多个简单步骤,在创建复杂对象的时候,只需要了解复杂对象的基本属性即可,而不需要关心复杂对象的内部构造过程。这样的话,使用方只需要关心这个复杂对象要什么数据,而不再关心内部细节。构造者模式的四个核心组件。Product 接口:复杂对象的接口,定义了要创建的目标对象的行为。ProductImpl 类:Product 接口的实现,它真正要创建的复杂对象,...原创 2021-09-07 21:01:25 · 192 阅读 · 0 评论 -
装饰器模式
装饰器模式就是一种通过组合方式实现扩展的设计模式,装饰器的核心思想是为已有实现类创建多个包装类,由这些新增的包装类完成新需求的扩展。装饰器模式使用的是组合方式,相较于继承这种静态的扩展方式,装饰器模式可以在运行时根据系统状态,动态决定为一个实现类添加哪些扩展功能。原理图如下:Component 接口:已有的业务接口,是整个功能的核心抽象,定义了 Decorator 和 ComponentImpl 这些实现类的核心行为。ComponentImpl 实现类:实...原创 2021-09-06 20:36:19 · 173 阅读 · 0 评论 -
javassist使用并生成动态代理
Javaassist 就是一个用来 处理 Java 字节码的类库。它可以在一个已经编译好的类中添加新的方法,或者是修改已有的方法,并且不需要对字节码方面有深入的了解。同时也可以去生成一个新的类对象,通过完全手动的方式。首先需要引入jar包:<dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><...原创 2021-09-06 19:01:58 · 926 阅读 · 0 评论 -
责任链模式
在现实生活中,一个事件需要经过多个对象处理是很常见的场景。例如,采购审批流程、请假流程等。公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这无疑增加了难度。责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着原创 2021-09-06 18:46:06 · 110 阅读 · 0 评论 -
Cglib动态代理
CGLIB(Code Generation Library)是一个开源项目!是一个强大的,高性能,高质量的Code生成类库,cglib 实现动态代理的底层原理是字节码生成技术,具体就是使用字节码生成技术生成一个目标类的子类,然后在这个子类中进行方法重写,并在重写的方法中进行拦截,实现代理对象的相关功能。需要引入cglib包(2021-8)<!-- cglib --><dependency> <groupId>cgli...原创 2021-08-27 20:55:46 · 616 阅读 · 0 评论 -
JDK动态代理模式
JDK动态代理的前提是必须有接口,JDK 动态代理会为每个业务接口动态生成相应的代理类实现,并加载到 JVM 中,然后创建对应的代理实例对象。JDK 动态代理的实现原理:动态创建代理类,然后通过指定类加载器进行加载。1) JDK动态代理的核心是InvocationHandler接口,该接口只包含一个抽象方法public Object invoke(Object proxy, Method method, Object[...原创 2021-08-27 20:50:06 · 225 阅读 · 0 评论 -
Java静态代理模式
静态代理模式Subject:程序中的业务接口,定义了相关的业务方法RealSubject:实现了Subject接口的业务实现类,其实现中完成了真正的业务逻辑。Proxy:代理类,实现了Subject接口,其中会持有一个Subject类型的字段指向一个RealSubject对象。Proxy代理能够控制使用方对RealSubject对象的访问,或者在执行业务逻辑前执行统一的预处理逻辑,在执行业务逻辑之后执行统一的后置处理逻辑。目标接口public in...原创 2021-08-27 20:42:39 · 69 阅读 · 0 评论 -
图解工厂方法模式
工厂方法模式的四个核心角色Factory接口:使用方依赖Factory创建Product对象实例Factory实现类:用于创建Product对象,不同的Factory实现会根据需求创建不同的Product实现类Product接口:用于定义业务类的核心功能。Factory接口创建出来的所有对象都需要实现Product接口。Product实现类:实现了Product接口中定义的方法,完成具体的业务逻辑工厂方法模式也符合开发-封闭原则工厂方法模式的核心:可以通过实现Facto...原创 2021-08-14 21:02:41 · 107 阅读 · 0 评论 -
图解适配器模式
适配器模式原理如下图:适配器的好处:复用已有的逻辑,提升系统的兼容性,符合开放-闭合原则。核心原理:通过组合方式,将需要适配的类转换成使用者能够使用的接口原创 2021-08-14 20:33:21 · 353 阅读 · 0 评论