
设计模式
文章平均质量分 74
zhaoyang10
技术人员要成为最懂业务的技术专家
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java 设计模式之Observer观察者模式
思路:基于某个Subject主题,然后一堆观察者Observer注册到主题上,有事件发生时,subject根据注册列表,去通知所有的observer。观察者的二个实现:用java8重构后,接口可以提供默认实现方法,我们弄一个新的主题接口只用2个接口实现了观察者模式。...原创 2019-07-15 17:26:09 · 254 阅读 · 0 评论 -
Java 设计模式之Chain of Responsibility责任链模式
核心思想:每个处理环节,都有一个“指针”指向下一个处理者,类似链表一样。抽象实现类定义2个具体的实现及用java8重构后,只需要一个新接口andThen天然就是getNextProcessor的另一种表达。原创 2019-07-15 18:23:20 · 249 阅读 · 1 评论 -
Java 设计模式之服务定位器模式
服务定位器模式(Service Locator Pattern)用在我们想使用 JNDI 查询定位各种服务的时候。考虑到为某个服务查找 JNDI 的代价很高,服务定位器模式充分利用了缓存技术。在首次请求某个服务时,服务定位器在 JNDI 中查找服务,并缓存该服务对象。当再次请求相同的服务时,服务定位器会在它的缓存中查找,这样可以在很大程度上提高应用程序的性能。以下是这种设计模式的实体。服务(Se...原创 2019-07-18 11:31:55 · 182 阅读 · 0 评论 -
Java 设计模式之拦截过滤器模式
拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务。过滤器链(Filter Cha...转载 2019-07-18 11:49:23 · 437 阅读 · 0 评论 -
Java 设计模式之TemplateMethod模板方法模式
在含有继承结构的代码中,模板方法模式是非常常用的,这也是在开源代码中大量被使用的。通常会有一个抽象类:public abstract class AbstractTemplate { // 这就是模板方法 public void templateMethod(){ init(); apply(); // 这个是重点 end();.........原创 2019-07-16 15:44:20 · 176 阅读 · 1 评论 -
Java 设计模式之Simple Factory简单工厂模式
public class FoodFactory { public static Food makeFood(String name) { if (name.equals("noodle")) { Food noodle = new LanZhouNoodle(); noodle.addSpicy("more"); ...转载 2019-07-16 16:33:17 · 123 阅读 · 0 评论 -
Java 设计模式之Factory工厂模式
public interface FoodFactory { Food makeFood(String name);}public class ChineseFoodFactory implements FoodFactory { @Override public Food makeFood(String name) { if (name.equals...转载 2019-07-16 16:37:48 · 332 阅读 · 0 评论 -
Java 设计模式之Abstract Factory抽象工厂模式
当涉及到产品族的时候,就需要引入抽象工厂模式了。一个经典的例子是造一台电脑。我们先不引入抽象工厂模式,看看怎么实现。因为电脑是由许多的构件组成的,我们将 CPU 和主板进行抽象,然后 CPU 由 CPUFactory 生产,主板由 MainBoardFactory 生产,然后,我们再将 CPU 和主板搭配起来组合在一起,如下图:这个时候的客户端调用是这样的:// 得到 Intel 的 CPU...转载 2019-07-16 16:48:15 · 158 阅读 · 0 评论 -
Java 设计模式之Prototype原型模式
Object 类中有一个 clone() 方法,它用于生成一个新的对象,当然,如果我们要调用这个方法,java 要求我们的类必须先实现 Cloneable 接口,此接口没有定义任何方法,但是不这么做的话,在 clone() 的时候,会抛出 CloneNotSupportedException 异常。protected native Object clone() throws CloneNotSup...转载 2019-07-16 16:54:03 · 288 阅读 · 0 评论 -
Java 设计模式之Agent代理模式
既然说是代理,那就要对客户端隐藏真实实现,由代理来负责客户端的所有请求。当然,代理只是个代理,它不会完成实际的业务逻辑,而是一层皮而已,但是对于客户端来说,它必须表现得就是客户端需要的真实实现。理解代理这个词,这个模式其实就简单了。public interface FoodService { Food makeChicken(); Food makeNoodle();}pu...转载 2019-07-16 16:59:24 · 1710 阅读 · 0 评论 -
Java 设计模式之Iterator迭代器模式
行为型模式提供一个方法,可以顺序访问一个对象内部的各个元素,不需要知道内部构造。现在基本很少自己实现迭代器了,基本成熟的框架或者强大的JDK都会给出访问的方法,比如说java中iterator。这样做主要是进一步封装对象内部的结构,让行为和结构想耦合。这个不举例子了,用过iterator这个的小伙伴应该都清楚,就是不停的next,去访问下一个元素。参考文档:https://juejin.im/...转载 2019-07-17 11:33:51 · 131 阅读 · 0 评论 -
Java 设计模式之Memento备忘录模式
行为型模式相当于做一个快照,在不破坏对象本身结构的情况下,记录对象的一个状态,合适的时候可以恢复到这种状态。数据库做事务回滚的时候就用了这种方式。这里需要注意的是,对象不与备忘录本身耦合,而是跟备忘录管理类耦合(就是List<备忘录>),这个好理解,毕竟快照不止一个嘛。//备忘录@Datapublic class Memento { private String stat...转载 2019-07-17 11:47:48 · 188 阅读 · 0 评论 -
Java 设计模式之Visitor访问者模式
行为型模式访问者模式在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。介绍意图:主要将数据结构与数据操作分离。主要解决:稳定的数据结构和易变的操作耦合问题。何时使用:需要对...转载 2019-07-17 14:20:13 · 270 阅读 · 0 评论 -
Java 设计模式之Mediator中介者模式
行为型模式降低对象或者说事物之间通讯的复杂性,降低耦合。比如说分布式系统中,不是需要实时反馈的操作,我们无需直接对接,只需将想做的事告诉中间件,中间件告诉另外一个系统。比如说,访问(用户点击)一条新闻操作,同时需要记录是谁访问了什么新闻,同时给新闻浏览次数加1,还要实时更新用户喜好…总之要更新n个数据库表,甚至还要操作像ES,Mongo等多个中间件数据。但是对于用户来说,我只是做了一个点击操作,...转载 2019-07-17 12:01:44 · 231 阅读 · 0 评论 -
Java 设计模式之Strategy策略模式
策略模式太常用了,所以把它放到最前面进行介绍。它比较简单,我就不废话,直接用代码说事吧。下面设计的场景是,我们需要画一个图形,可选的策略就是用红色笔来画,还是绿色笔来画,或者蓝色笔来画。首先,先定义一个策略接口:public interface Strategy { public void draw(int radius, int x, int y);}然后我们定义具体的几个策略:...转载 2019-07-15 17:18:30 · 237 阅读 · 0 评论 -
Java 设计模式总结汇总
设计模式分类为 23 种经典的模式,根据用途分为三大类,分别为创建型模式、结构型模式和行为型模式。设计原则面向接口编程,而不是面向实现。这个很重要,也是优雅的、可扩展的代码的第一步,这就不需要多说了吧。职责单一原则。每个类都应该只有一个单一的功能,并且该功能应该由这个类完全封装起来。对修改关闭,对扩展开放。对修改关闭是说,我们辛辛苦苦加班写出来的代码,该实现的功能和该修复的 bug 都完...原创 2019-07-15 15:34:18 · 155 阅读 · 0 评论 -
Java如何优化大量的if else
来自Google的解释:表驱动法是一种编程模式,它的本质是,从表里查询信息来代替逻辑语句(if,case)。其实这里的表就是数组而已,通过直接查询数组来获得需要的数据,那么同理,Map之类的容器也可以成为我们编程概念中的表。通过Java8的lambda表达式,我们把需要执行东西存进value中,调用的时候通过匹配key的方式进行。在项目中,总少不了一些非空的判断,可能大部分人还是如下的用法。上面的代码跟第一段是等效的,通过一些新特性让代码更加紧凑。这里的条件返回的结果都是一样的,那么我们先把条件合并起来。原创 2019-01-11 13:59:27 · 42487 阅读 · 3 评论 -
观察者模式 vs 发布订阅模式
https://juejin.im/post/5c0a9d9bf265da612909ff1b转载 2019-01-24 16:02:59 · 188 阅读 · 0 评论 -
Java 设计模式之Command命令模式
https://juejin.im/post/5c4831b1e51d4526a76e0a59转载 2019-01-24 16:05:29 · 146 阅读 · 0 评论 -
JDK里的设计模式
https://www.cnblogs.com/tinyking/p/5938547.html转载 2019-01-25 10:15:30 · 180 阅读 · 0 评论 -
Java 设计模式之State状态模式
https://www.cnblogs.com/java-my-life/archive/2012/06/08/2538146.html原创 2019-03-12 11:15:17 · 134 阅读 · 0 评论 -
Java 设计模式之Decorator装饰模式
https://www.cnblogs.com/java-my-life/archive/2012/04/20/2455726.html转载 2019-03-12 14:23:40 · 154 阅读 · 0 评论 -
Java 设计模式之Singleton单例模式实现
1. 饿汉模式public class Singleton { // 首先,将 new Singleton() 堵死 private Singleton() {}; // 创建私有静态实例,意味着这个类第一次使用的时候就会进行创建 private static Singleton instance = new Singleton(); public st...原创 2019-05-30 18:32:59 · 184 阅读 · 0 评论 -
Java 设计模式之Builder建造者模式
创建型模式1. 手写建造者模式class User { private String name; private String password; private String nickName; private int age; private User(String name, String password, String nickName, i...原创 2019-05-30 19:19:19 · 475 阅读 · 0 评论 -
Java 设计模式之Adapter适配器模式
适配器模式做的就是,有一个接口需要实现,但是我们现成的对象都不满足,需要加一层适配器来进行适配。适配器模式总体来说分三种:默认适配器模式、对象适配器模式、类适配器模式。先不急着分清楚这几个,先看看例子再说。默认适配器模式首先,我们先看看最简单的适配器模式默认适配器模式(Default Adapter)是怎么样的。我们用 Appache commons-io 包中的 FileAlterationLi...原创 2019-07-15 11:33:00 · 177 阅读 · 0 评论 -
Java 设计模式之Bridge桥接模式
我们首先需要一个桥梁,它是一个接口,定义提供的接口方法。public interface DrawAPI { public void draw(int radius, int x, int y);}然后是一系列实现类:public class RedPen implements DrawAPI { @Override public void draw(int radiu...原创 2019-07-15 14:49:45 · 254 阅读 · 0 评论 -
Java 设计模式之Facade门面(外观)模式
门面模式(也叫外观模式,Facade Pattern)在许多源码中有使用,比如 slf4j 就可以理解为是门面模式的应用。这是一个简单的设计模式,我们直接上代码再说吧。首先,我们定义一个接口:public interface Shape { void draw();}定义几个实现类:public class Circle implements Shape { @Overri...转载 2019-07-15 15:13:35 · 181 阅读 · 0 评论 -
Java 设计模式之Composite组合模式
组合模式用于表示具有层次结构的数据,使得我们对单个对象和组合对象的访问具有一致性。直接看一个例子吧,每个员工都有姓名、部门、薪水这些属性,同时还有下属员工集合(虽然可能集合为空),而下属员工和自己的结构是一样的,也有姓名、部门这些属性,同时也有他们的下属员工集合。public class Employee { private String name; private String d...原创 2019-07-15 15:22:16 · 209 阅读 · 0 评论 -
Java 设计模式之Flyweight享元模式
英文是 Flyweight Pattern,不知道是谁最先翻译的这个词,感觉这翻译真的不好理解,我们试着强行关联起来吧。Flyweight 是轻量级的意思,享元分开来说就是 共享 元器件,也就是复用已经生成的对象,这种做法当然也就是轻量级的了。复用对象最简单的方式是,用一个 HashMap 来存放每次新生成的对象。每次需要一个对象的时候,先到 HashMap 中看看有没有,如果没有,再生成新的对象...转载 2019-07-15 15:28:20 · 155 阅读 · 0 评论 -
Java 设计模式之Interpreter解释器模式
行为型模式解释器模式解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。介绍意图:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。主要解决:对于一些固定文法构建一个解释句子的解释器。何时使...转载 2019-07-17 14:13:08 · 207 阅读 · 0 评论