盖个楼还要有图纸,你怎么可以不懂设计模式(一)
模板方法模式&观察者模式&责任链模式
模板方法模式
Template Method
模式定义:
定义一个操作的算法骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
1 public class TemplateMethodTest { 2 public static void main(String[] args) { 3 AbstractClass abstractClass=new SubClass1(); 4 } 5 } 6 7 abstract class AbstractClass{ 8 public void operation(){ 9 // open 10 System.out.println(" pre ... "); 11 12 System.out.println(" step1 "); 13 14 System.out.println(" step2 "); 15 16 templateMethod(); 17 } 18 19 abstract protected void templateMethod(); 20 } 21 22 class SubClass extends AbstractClass{ 23 @Override 24 protected void templateMethod() { 25 System.out.println("SubClass executed . "); 26 } 27 } 28 29 class SubClass1 extends AbstractClass{ 30 @Override 31 protected void templateMethod() { 32 System.out.println("SubClass1 executed . "); 33 } 34 }
应用场景
1.当你想让客户端只扩展算法的特定步骤,而不是整个算法或其结构时,请使用Template Method模式。
2.当你有几个类包含几乎相同的算法,但有一些细微的差异时,请使用此模式。
优点:
1.你可以让客户端只覆盖大型算法的某些部分,从而减少算法其他部分发生的更改对它们的影响。
2.你可以将重复的代码拖放到超类中。
Servlet Api & Spring 中的应用:
1 org.springframework.web.servlet.mvc.AbstractController
2 javax.servlet.http.HttpServlet
观察者模式
Observer
模式定义:
定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者都会收到通知并更新
应用场景:
当更改一个对象的状态可能需要更改其他对象,并且实际的对象集事先未知或动态更改时,请使用观察者模式。
优点:
1.符合开闭原则
2.可以在运行时建立对象之间的关系
JDK&Spring源码中的应用
1 JDK:
2 java.util.Observable
3 Spring:
4 org.springframework.context.ApplicationListener
如果不知在生产环境如何让使用,看这个?
全面解析Java8观察者模式
责任链模式
Chain Of Responsibility
模式定义:
为请求创建了一个接收者对象的链。
应用场景:
一个请求的处理需要多个对象当中的一个或几个协作处理。
优点:
1.请求的发送者和接受者解耦
2.可以控制执行顺序
3.符合开闭原则和单一职责原则
经典案例
1 javax.servlet.Filter
2 javax.servlet.FilterChain
代码示例看这个
Java中的责任链设计模式,太牛了!
转载链接:https://mp.weixin.qq.com/s/jD6h2UYm1KStma-RuvyAHA
责任链进阶,看这个

浙公网安备 33010602011771号