一、行为模式

二、责任链模式(chainOfResponsibility)

【一个请求类】

/*** 请假类
* 封装请假的基本信息
*/
package cn.sxt.chainOfResponsibility; public class LeaveRequest {
private String empName;
private int leaveDays;
private String reason; public LeaveRequest(String empName, int leaveDays, String reason) {
super();
this.empName = empName;
this.leaveDays = leaveDays;
this.reason = reason;
} public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public int getLeaveDays() {
return leaveDays;
}
public void setLeaveDays(int leaveDays) {
this.leaveDays = leaveDays;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
} }

【领导类】

/***
* 抽象类 "领导"类
*/
package cn.sxt.chainOfResponsibility; public abstract class Leader {
protected String name;//protected子类可以使用的属性
protected Leader nextLeader;//责任链上的下一个领导 public Leader(String name) {
super();
this.name = name;
} //下一个(上一级)领导的名字
public void setNextLeader(Leader nextLeader) {
this.nextLeader = nextLeader;
}
//处理请求的核心方法 抽象方法
public abstract void handleRequest(LeaveRequest request); }

【各级领导】

/** "主任" 类
*
*/
package cn.sxt.chainOfResponsibility; public class Director extends Leader { public Director(String name) {
super(name);
} @Override
public void handleRequest(LeaveRequest request) {
if (request.getLeaveDays()<=3) {
System.out.println("员工:"+request.getEmpName()+",请假天数:"+request.getLeaveDays()+",事由:"
+request.getReason());
System.out.println("意见:主任_"+this.name+",审批通过!"); }else {//大于3天交给下家-经理处理
if (this.nextLeader!=null) {
this.nextLeader.handleRequest(request);
}
}
} } /** "经理" 类
*
*/
package cn.sxt.chainOfResponsibility; public class Manager extends Leader { public Manager(String name) {
super(name);
} @Override
public void handleRequest(LeaveRequest request) {
if (request.getLeaveDays()<=10) {
System.out.println("员工:"+request.getEmpName()+",请假天数:"+request.getLeaveDays()+",事由:"
+request.getReason());
System.out.println("意见:经理_"+this.name+",审批通过!"); }else {//大于10天交给总经理处理
if (this.nextLeader!=null) {
this.nextLeader.handleRequest(request);
}
}
} } /** 添加"副总经理" 类,不需要修改已有的代码
*
*/
package cn.sxt.chainOfResponsibility; public class ViceGeneraManager extends Leader { public ViceGeneraManager(String name) {
super(name);
} @Override
public void handleRequest(LeaveRequest request) {
if (request.getLeaveDays()<=20) {
System.out.println("员工:"+request.getEmpName()+",请假天数:"+request.getLeaveDays()+",事由:"
+request.getReason());
System.out.println("意见:副总经理_"+this.name+",审批通过!"); }else {//副总经理找经理
if (this.nextLeader!=null) {
this.nextLeader.handleRequest(request);
}
}
} } /** "总经理" 类
*
*/
package cn.sxt.chainOfResponsibility; public class GeneraManager extends Leader { public GeneraManager(String name) {
super(name);
} @Override
public void handleRequest(LeaveRequest request) {
if (request.getLeaveDays()<=30) {
System.out.println("员工:"+request.getEmpName()+",请假天数:"+request.getLeaveDays()+",事由:"
+request.getReason());
System.out.println("意见:总经理_"+this.name+",审批通过!"); }else {//总经理没有下一家
System.out.println("莫非"+request.getEmpName()+"想辞职,让他交离职申请吧!"); }
} }

【客户】

/**
*
*/
package cn.sxt.chainOfResponsibility; public class Client {
public static void main(String[] args) {
Leader director=new Director("张主任");
Leader manager=new Manager("王经理");
Leader viceLeader=new ViceGeneraManager("赵副总");//增加副总审批
Leader genLeader=new GeneraManager("李总"); //组织责任链,即领导之间的关系
director.setNextLeader(manager);
manager.setNextLeader(viceLeader);
viceLeader.setNextLeader(genLeader); //请假操作
LeaveRequest req1=new LeaveRequest("Tom", 15, "去抓老鼠Jerry");
director.handleRequest(req1); LeaveRequest req2=new LeaveRequest("Dog", 31, "去揍Tom猫");
director.handleRequest(req2); }
}

三、迭代器模式(iterator)

【自定义接口】

/**
* 自定义迭代器接口
*/
package cn.sxt.iterator; public interface Myiterator {
void first();//将游标指向第一个元素
void next();//将游标指向下一个元素
boolean hasNext();//判断是否存在下一个元素 boolean isFirst();
boolean isLast(); Object getCurrentObj();//获取当前游标指向的对象 }
/**
* 自定义聚合类
*/
package cn.sxt.iterator; import java.util.ArrayList;
import java.util.List; public class ConcreteMyAggregate {
private List<Object> list=new ArrayList<Object>(); public void addObj(Object obj) {//增
this.list.add(obj);
} public void remove(Object obj) {//删除
this.list.remove(obj);
} public List<Object> getList() {
return list;
} public void setList(List<Object> list) {
this.list = list;
} public Myiterator creaMyiterator() {//获得一个迭代器
return new ConcreteIterator(); } //使用内部类定义迭代器 可以使用外部类的属性
private class ConcreteIterator implements Myiterator{
private int cursor;//定义游标,用于遍历时的位置,如果要倒置遍历,则private int cursor=list.size()-1,下边的++变-- @Override
public void first() {
cursor=0;
} @Override
public Object getCurrentObj() {//当前游标指向的对象
return list.get(cursor);
} @Override
public boolean hasNext() {
if (cursor<list.size()) {
return true;
}
return false;
} @Override
public boolean isFirst() {
return cursor==0?true:false;
} @Override
public boolean isLast() {
return cursor==(list.size()-1)?true:false;
}
@Override
public void next() {
if (cursor<list.size()) {
cursor++;
}
} }
}

【测试】

/**
*
*/
package cn.sxt.iterator; public class Client {
public static void main(String[] args) {
ConcreteMyAggregate cma=new ConcreteMyAggregate();
cma.addObj("我");
cma.addObj("爱");
cma.addObj("你"); Myiterator iter=cma.creaMyiterator();
while (iter.hasNext()) {
System.out.println(iter.getCurrentObj());
iter.next();
}
} }

[19/04/29-星期一] GOF23_行为型模式(责任链模式、迭代器模式)的更多相关文章

  1. 【设计模式】行为型05责任链模式(Chain of responsibility Pattern)

    学习地址:http://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html demo采用了DEBUG级别举例子,理解起 ...

  2. 《Android源码设计模式》--状态模式--责任链模式--解释器模式--命令模式--观察者模式--备忘录模式--迭代器模式

    [状态模式] No1: Wifi设置界面是一个叫做WifiSetting的Fragment实现的 No2: 在不同的状态下对于扫描Wifi这个请求的处理是完全不一样的.在初始状态下扫描请求被直接忽略, ...

  3. [19/04/28-星期日] GOF23_结构型模式(享元模式)

    一.享元模式(FlyWeight,轻量级) [共享类与非共享类] /*** *FlyweightFactory享元工厂类: 创建并管理享元对象,享元池一般设计成键值对 */ package cn.sx ...

  4. 《精通Python设计模式》学习行为型之责任链模式

    感觉是全新的学习了. 因为在以前的工作中,并没有有意识的去运用哪一种编程模式. 以后要注意的了. 这才是高手之路呀~ class Event: def __init__(self, name): se ...

  5. 【java设计模式】【行为模式Behavioral Pattern】迭代器模式Iterator Pattern

    package com.tn.pattern; public class Client { public static void main(String[] args) { Object[] objs ...

  6. 设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型)

      设计模式 ( 十四 ) 迭代器模式Iterator(对象行为型) 1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的 ...

  7. C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】

    一.引言   今天我们开始讲"行为型"设计模式的第三个模式,该模式是[迭代器模式],英文名称是:Iterator Pattern.还是老套路,先从名字上来看看."迭代器模 ...

  8. C#设计模式之十五迭代器模式(Iterator Pattern)【行为型】

    一.引言 今天我们开始讲“行为型”设计模式的第三个模式,该模式是[迭代器模式],英文名称是:Iterator Pattern.还是老套路,先从名字上来看看.“迭代器模式”我第一次看到这个名称,我的理解 ...

  9. 设计模式(十五):Iterator迭代器模式 -- 行为型模式

    1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合. 集合不一定是均一的.图形用 ...

随机推荐

  1. nodejs搭建简易的rpc服务

    这里主要使用的是jayson包,使用jayson实现rpc server端十分简单,如下: var jayson = require('jayson') // create a server var ...

  2. [javaSE] GUI(练习-列出指定目录内容)

    获取Frame对象 获取TextField对象 获取TextArea对象 获取Button对象 调用Frame对象的add()方法,添加进去 调用TextField对象的getText()方法,可以获 ...

  3. SyntaxError: expected expression, got '<'

    用firebug查看网络请求发现js没有问题,问题在于ajax返回的数据错误,格式是<script type='text/javascript'> ... ... </script& ...

  4. redux实现原理

    redux基本概念 基本概念 1.store 用来保存数据的地方,使用createStore来生成数据 store = createStore(fn) 2.state,通过拷贝store中的数据得到 ...

  5. BZOJ4598: [Sdoi2016]模式字符串(点分治 hash)

    题意 题目链接 Sol 直接考虑点分治+hash匹配 设\(up[i]\)表示\(dep \% M = i\)的从下往上恰好与前\(i\)位匹配的个数 \(down\)表示\(dep \% M = i ...

  6. lnmp环境 开启pathinfo

    thinkphp url访问模式中 默认的pathinfo不起作用? 1.检查你的tp配置文件config.php URL模式 'url_model'=> '1', //URL模式 即pathi ...

  7. Linux Notes

    Do what we want based on what others already did with additional abstraction and organization to ser ...

  8. python 增加矩阵行列和维数

    python 增加矩阵行列和维数 方法1 np.r_ np.c_ import numpy as np a = np.array([[1,2,3],[4,5,6],[7,8,9]]) b = np.a ...

  9. [转载]一步一步教你如何在Virtualbox虚拟机中安装Remix

    原文地址:https://bbs.jide.com/forum.php?mod=viewthread&tid=4892 大神请路过-- [准备工具] 1.Virtualbox虚拟机(这个是免费 ...

  10. winform基础控件总结

    转自:http://www.cnblogs.com/top5/archive/2010/04/29/1724039.html 基础 - 常用控件 C# WinForm开发系列 - CheckBox/B ...