标签: 设计模式

Java设计模式教程(二)——责任链模式(Chain of Responsibility)

责任链模式(Chain of Responsibility)是行为模式之一,该模式构造一系列分别担当不同职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作责任链模式。

一、应用场景:

例1:比如客户要完成一个任务,这个任务包括a,b,c,d四个部分。 首先客户Client把任务交给A,A完成a部分之后,把任务交给B,B完成b部分,…,直到D完成d部分。
例2:web开发中的filter和interceptor

二、UML类图
责任链模式

抽象处理者(Handler)角色:定义一个请求的接口。如果需要可以定义个一个方法用来设定和返回下家对象的引用。
具体处理者(ConcreteHandler)角色:如果可以处理就处理请求,如果不能处理,就把请求传给下家,让下家处理。也就是说它处理自己能处理的请求且可以访问它的下家。 阅读详细 »

Java设计模式教程(一)——模板方法模式(Template Method)

模板方法(Template Method)模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这里的算法的结构,可以理解为你根据需求设计出来的业务流程。特定的步骤就是指那些可能在内容上存在变数的环节。

结构:

1) 抽象类(Abstract Class):定义了一到多个的抽象方法,以供具体的子类来实现它们;而且还要实现一个模板方法,来定义一个算法的骨架。该模板方法不仅调用前面的抽象方法,也可以调用其他的操作,只要能完成自身的使命。
2) 具体类(Concrete Class):实现父类中的抽象方法以完成算法中与特定子类相关的步骤。

abstract class Meetting {
    public abstract void task();

    public abstract void howGo();

    public void goMeetting() {
        System.out.println("准备开会去哦!");
        task();
        howGo();
        System.out.println("开会结束,我要换回公司了!");
    }
}

class PersonA extends Meetting {
    public PersonA(String name) {
        System.out.println("我的名字叫" + name);
    }

    public void task() {
        System.out.println("老板让我去总公司汇报财政情况");
    }

    public void howGo() {
        System.out.println("我搭公交车去总公司开会!");
    }
}

class PersonB extends Meetting {
    public PersonB(String name) {
        System.out.println("我的名字叫" + name);
    }

    public void task() {
        System.out.println("老板让我去总公司提货物");
    }

    public void howGo() {
        System.out.println("我搭公交车去总公司开会!");
    }
}

public class AttendMeetting {
    public static void main(String[] args) {
        Meetting person;
        person = new PersonA("A");
        person.goMeetting();
        System.out.println("");
        person = new PersonB("B");
        person.goMeetting();
    }
}

适用情况:
1) 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
2) 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。其实这可
以说是一种好的编码习惯了。
3) 控制子类扩展。模板方法只在特定点调用操作,这样就只允许在这些点进行扩展。

文章分类汇总

mysql慢查询优化

mysql慢查询原因分析与解决(一)——开启慢查询日志
mysql慢查询原因分析与解决(二)——explain分析查询

JVM基础及优化系列
 JVM内存模型简介
    JVM内存回收简介
    【译】JVM之jconsole的使用
    JVM参数详解
    JVM -verbose参数详解
    java jvm GC 参数设置
    java.lang.OutOfMemoryError: GC overhead limit exceeded解决
    《深入java虚拟机》笔记
jdk源码分析系列
        ArrayList源码分析
        LinkedList源码分析
        Vector源码分析
        HashMap源码分析
        HashTable源码分析
  阅读详细 »