一、行为模式

二、责任链模式(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. linux中find与rm实现查找并删除文件

    find命令: find . -name '*.log' #查找当前目录下的log文件 查找并删除: find . -name '*.log' -type f -print -exec rm -rf ...

  2. 面向对象(基础oop)之初识继承

    大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...

  3. Spring Boot学习笔记(二)全局捕获异常处理

    非常简单只需要创建自己的异常处理类,加上两个注解,就可以了

  4. 设计模式之状态模式IFORNOIF(二十二)

    今天大风大雨, 但心情还行, 继续撸DOTA 状态模式(state pattern)定义 当一个对象的内在状态改变时允许改变其行为, 这个对象看起来像是改变了其类 这在我们开发的业务中太常见了, 角色 ...

  5. WebService,ASMX文件使用XML格式数据传递参数、验证与获取XML格式返回值的一种方式

    1:首先WebService方法定义,每个方法定义两个参数,一个用于验证权限,string格式的XML文本用于传输数据.最终目的实现,WebService方法,验证权限,获取XML数据,处理之后返回X ...

  6. safari

    http://www.zhangxinxu.com/wordpress/2014/10/mobilebone-js-mobile-web-app-core/ http://rawgit.com/zha ...

  7. Tomcat学习总结(一):目录简介

    一:下载地址和目录结构说明. Tomcat官方站点:http://jakarta.apache.org 下载Tomcat安装程序包:http://tomcat.apache.org/

  8. CSS知多少

    1.Cascading Style Sheets 层叠样式表 2.层叠就是浏览器对多个样式来源进行叠加,最终确定结果的过程. 3. 样式的5大来源:浏览器默认样式.浏览器用户自定义样式.行内样式.内部 ...

  9. mybatis大框架

    MyBatis   开源的数据持久化层框架 实体类与SQL语句之间建立映射关系 一:MyBatis前身是IBatis,本是Apache的一个开源的项目, 基于SQL语法,简单易学 ,是耦合度降低,方便 ...

  10. GoJs实现流程管理图

    GoJS是一个实现交互类图表(比如流程图,树图,关系图,力导图等等)的JS库. 可以加入诸多功能.如流程判断,节点处理等等.GOJS在设计上极大的减轻了开发人员的开发成本.