一、行为模式

二、责任链模式(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. 简单的winform编辑器

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  2. Shiro官方快速入门10min例子源码解析框架3-Authentication(身份认证)

    在作完预备的初始化和session测试后,到了作为一个权鉴别框架的核心功能部分,确认你是谁--身份认证(Authentication). 通过提交给shiro身份信息来验证是否与储存的安全信息数据是否 ...

  3. CenOs7安装oracle图文详细过程(02)

    原创作品,转载请在文章头部(显眼位置)注明出处:https://www.cnblogs.com/sunshine5683/p/10011574.html 8.修改用户限制 vim /etc/secur ...

  4. CSS选择器:#id和.class中间有空格和无空格的区别

    相信大家都知道 .class1 .class2 和 .class1.class2 是两种不同的选择规则,但具体怎样不同呢? 首先中间有空格的情况:是选择到.class1类下的.class2类子节点,即 ...

  5. 【转载】python实例手册

    今天写爬虫的时候遇到了问题,在网上不停地查找资料,居然碰到两篇好文章: 1.python实例手册   作者:没头脑的土豆 另一篇在这:shell实例手册 python实例手册 #encoding:ut ...

  6. sql-pivot

    PIVOT PIVOT运算符用于在列和行之间进行数据旋转或透视转换,同时执行聚合运算 ,,) Order By empid asc Select * From ( Select empid,YEAR( ...

  7. Android实现图片下载并保存SD卡

    一.首先获取图片 //第一种获取图片的方法 String filePath = downloadUrl; //以下是取得图片的方法 取得的是InputStream,直接从InputStream生成bi ...

  8. Rxjava学习(一基础篇)

    一.Rxjava跟EventBus的区别 RxJava 是一个响应式编程框架,通过一种扩展的观察者设计模式来实现异步操作. 跟AsyncTask和Handler类似,但是比AsyncTask和Hand ...

  9. C语言写控制台互交界面

    void show_menu() { //system("clear"); printf("---------------------\n"); printf( ...

  10. CPU硬件辅助虚拟化技术

    目前主要有Intel的VT-x和AMD的AMD-V这两种技术.其核心思想都是通过引入新的指令和运行模式,使VMM和Guest OS分别运行在不同模式(ROOT模式和非ROOT模式)下,且Guest O ...