design-pattern
AntHub
闻道有先后,术业有专攻;
有道无术尚可求,有术无道止于术;
熵减、熵减、熵减,还是熵减。
展开
-
16、门面模式
文章目录package com.example.demo.designpattern;/** * 门面模式/外观模式;结构型模式; * 隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。它向现有的系统添加一个接口,来隐藏系统的复杂性; * 门面模式提供一个高层次的接口, 使得子系统更易于使用; * 应用:Tomcat-RequestFacade;slf4j;jdbc;socket * 角色: * - facade 门面角色:客户端可以调用这个角色的方法。 此角色知晓子系统的原创 2021-06-09 20:49:54 · 95 阅读 · 0 评论 -
15、备忘录
文章目录package com.example.demo.designpattern;import java.util.ArrayList;import java.util.concurrent.atomic.AtomicInteger;/** * 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态; * 角色: * Originator(原发器):它是一个普通类,可以创建一个备忘录,并存储它的当前内部状态, * 也可以使用备忘录来恢复其内部状态,一般原创 2021-06-07 21:53:28 · 133 阅读 · 0 评论 -
14、命令模式
文章目录package com.example.demo.designpattern;/** * 请求以命令的形式包裹在对象中,并传给调用对象。 * 调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令; * 将一个请求封装成一个对象,从而让你可以用不同的请求把客户端进行参数化; * 角色: * 命令角色; Invoker调用者角色-接收到命令, 并执行命令; * Receiver 接收者角色:该角色就是干活的角色, 命令传递到这里是应该被执行的, */p原创 2021-06-06 10:37:52 · 41 阅读 · 0 评论 -
13、桥接模式
文章目录package com.example.demo.designpattern;/** * 将抽象和实现解耦, 使得两者可以独立地变化; * 抽象角色引用实现角色; * 很多叫 xxx-bridge 的可能不是桥接模式,而是适配器模式; * 而很多叫 Adapter 的可能也不是适配器模式,而只是一种编程习惯的命名方式 * 桥接模式是说两个不同维度独立发展;桥接类将两个维度进行关联; * 此模式可防止类爆炸; * ● Abstraction——抽象化角色:它的主要职责是定义出该角原创 2021-06-05 18:07:23 · 80 阅读 · 0 评论 -
12、适配器
文章目录package com.example.demo.designpattern;/** * 又叫包装模式(Wrapper); * 各种 wrapper bridge 就是适配器模式:jbdc-odbc-bridge * io 字节流字符流转换 * 角色:target 目标角色; Adaptee 源角色-已经服役; * Adapter 适配器 (适配器模式的核心角色, 其他两个角色都是已经存在的角色, 而适配器角色是需要新建 立的, * 职责: 把源角色转换为目标角色,通过继承或是依原创 2021-06-05 18:05:20 · 71 阅读 · 0 评论 -
11、访问者
文章目录demodemo/** * 不改变数据结构的前提下定义作用于这些元素的新的操作; * 访问者模式是对迭代器模式的扩充, 可以遍历不同的对象, 然后执行不同的操作; * 适用于数据结构相对稳定的系统; * 角色:抽象访问者(Visitor);具体访问者;抽象元素;具体元素;结构对象; * 编译器抽象语法树 */public class Visitor { public static void main(String[] args) { ObjectStru原创 2021-05-30 20:58:54 · 49 阅读 · 0 评论 -
10、组合模式
文章目录概念demo概念用于树形结构;这种类型的设计模式属于结构型模式;组合模式使得用户对单个对象和组合对象的使用具有一致性。demoimport java.util.ArrayList;/** * 1,Component抽象构件角色; 定义参加组合对象的共有方法和属性, 可以定义一些默认的行为或属性; * 2,Leaf叶子构件; 叶子对象, 其下再也没有其他的分支, 也就是遍历的最小单位。 * 3,Composite树枝构件; 树枝对象, 它的作用是组合树枝节点和叶子节原创 2021-05-30 17:56:17 · 56 阅读 · 0 评论 -
8、工厂方法
文章目录概念demo概念定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类;工厂模式使其创建过程延迟到子类进行;demopackage com.cn.go.designpattern;public class FactoryMethod { public static void main(String[] args) { MotorVehicleFactory motorVehicleFactory = new MotorVehicleFactory();原创 2021-04-12 22:35:40 · 55 阅读 · 0 评论 -
7、单例模式
文章目录概念demo概念属于创建型模式;防止反复创建和回收对象实例,减轻gc 负担正常使用时, 饿汉模式就可以;如果明确有懒加载的需求 可以使用内部类的方式;枚举方式很好,就是大家不熟悉,用着别扭;而且为了单例弄出这么多概念来让人感觉生疏;demopackage com.cn.go.designpattern;public class Singleton { public static void main(String[] args) { System.out原创 2021-04-11 21:36:37 · 57 阅读 · 0 评论 -
6、状态模式
文章目录概念3个角色demo概念状态模式属于行为型模式;只需要改变对象状态即可改变对象的行为;状态模式对"开闭原则"的支持并不太好;场景:1、行为随状态、属性改变而改变的场景。2、条件、分支语句的代替者。3个角色State:抽象状态角色;负责对象状态定义, 并且封装环境角色以实现状态切换。ConcreteState:具体状态角色;每一个具体状态必须完成两个职责:本状态下要做的事情, 以及本状态如何过渡到其他状态。Context:环境角色:定义客户端调用的接口, 并且负责具原创 2021-04-11 20:34:49 · 51 阅读 · 0 评论 -
5、策略模式
文章目录概念demo概念三个角色:Strategy抽象策略角色; ConcreteStrategy具体策略角色;Context封装角色;网上一般说,可以用来替换 if-else :但是我看到的多是说利用工厂+策略;那么这个判断过程变成了一个容器键值映射,从容器中取到对应的具体策略对象;那实际上对替换 if-else 起到关键作用的是 那个容器,而不是策略模式;在 java 中这个容器一般就是个 Map ;使用策略不用在原来 if-else 代码块中改动了,不会无限增大类和代码量;新增情况只需要新原创 2021-03-18 12:00:33 · 60 阅读 · 0 评论 -
4、享元模式
文章目录概念demo概念典型应用是:String 常量池;并不完全是对象池化技术;对象池更多的是从对象复用出发,考虑的是复用问题;对于调用方client来说,从池中 取到a对象还是b对象没有任何区别;享元模式强调的是对象的共享;强调内部状态和外部状态的概念;对调用方来说需要根据外部状态取到需要复用的对象;内部状态不会随环境改变而改变;会有线程安全的问题需要额外处理;demo由于实在找不到合适的例子;网上的案例我 get 不到他们说的点;不知道他们的例子实际应用中能解决什么问题;我引原创 2021-03-16 21:24:45 · 57 阅读 · 0 评论 -
3、迭代器
文章目录概念demo概念主要用来遍历 集合/ 容器 中的元素;屏蔽掉底层对象的实现不同;迭代器模式属于行为型模式;demopackage com.example.demo.designpattern;public class Iterator { public static void main(String[] args) { Container<String> stringArrList = new ArrList<>();原创 2021-03-14 13:39:37 · 75 阅读 · 2 评论 -
2、模板方法
文章目录概念demo概念父类定义抽象 的 template-method ,并由别的方法调用;子类实现具体的 template-method ;和观察者类似;回调函数;钩子函数,都是此模式的应用;观察者一般是多个,方法由被观察者调用;模板方法,由子类调用父类的共有方法,实现调用具体的 template-method;demopackage com.example.demo.designpattern;public class TemplateMethod { public st原创 2021-03-14 12:59:11 · 52 阅读 · 0 评论 -
1、观察者
文章目录观察者模式使用场景demo观察者模式当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。使用场景tomcat LifecycleListeneronclickdemopackage com.example.demo.designpattern;import java.util.ArrayList;import java.util.List;public class Observer { public static void main(原创 2021-02-21 20:50:01 · 84 阅读 · 0 评论