设计模式之职责链(Chain Of Responsibility)
来源:互联网 发布:python list太大拆分 编辑:程序博客网 时间:2024/06/10 19:11
使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象
连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.
适用性:
1.有多个对象可以处理一个请求,那个对象处理该请求运行时刻自动确定.
2.你想在不明确指定接受者的情况下,向多个对象中的一个提交一个请求.
3.可处理一个请求的对象集合应被动态指定.
效果:
1.降低耦合度
2.增强了给对象指派职责的灵活性
3.不保证被接受
代码实现:
击鼓传花实例:在规定时间内,最后一名处理请求
package com.git.books.b_design_patterns.m_chain_of_responsibility;import java.util.Timer;import java.util.TimerTask;/** * @Description: 责任链模式测试类 * @author: songqinghu * @date: 2017年3月9日 上午11:52:33 * Version:1.0 */public class ChainOfResponsibilityClient { private Timer timer; public static void main(String[] args) { ChainOfResponsibilityClient client = new ChainOfResponsibilityClient(); GamePlayer onePlayer =new OnePeoplePlayer("one people ",null); GamePlayer twoPlayer = new TwoPeoplePlayer("two people ",null); GamePlayer threePlayer = new ThreePeoplePlayer("three people ", null); GamePlayer fourPlayer = new FourPeoplePlayer("four people ", null); onePlayer.setPlayer(twoPlayer); twoPlayer.setPlayer(threePlayer); threePlayer.setPlayer(fourPlayer); fourPlayer.setPlayer(onePlayer); client.startGame(1000); onePlayer.gomeHandle(); } public void startGame(int second){ timer= new Timer(); System.out.println("the timer task is start!"); timer.schedule(new DrumsTimes(),second); } class DrumsTimes extends TimerTask{ @Override public void run() { System.out.println("the timer task is end !"); Drums.getInstance().getOrSetNoise("false"); timer.cancel(); } }}
package com.git.books.b_design_patterns.m_chain_of_responsibility;/** * @Description: 职责链模式 击鼓传花顶级接口类 * @author: songqinghu * @date: 2017年3月9日 下午3:06:16 * Version:1.0 */public interface GamePlayer { /** * @描述:游戏处理过程 * @return void * @createTime:2017年3月9日 * @author: songqinghu */ public void gomeHandle(); /** * @描述:传递给下一个用户 * @return void * @createTime:2017年3月9日 * @author: songqinghu */ void next(); public void setPlayer(GamePlayer player);}
package com.git.books.b_design_patterns.m_chain_of_responsibility;/** * @Description: 鼓声 * @author: songqinghu * @date: 2017年3月9日 下午3:19:21 * Version:1.0 */public class Drums { private static class DrumsInner{ private static final Drums drums = new Drums(); } private Object lock = new Object(); private Drums() { } public static Drums getInstance(){ return DrumsInner.drums; } private boolean isNoise = true; public boolean getOrSetNoise(String noise){ if(noise ==null){ return isNoise; }else{ this.isNoise = Boolean.parseBoolean(noise); return isNoise; } }}
package com.git.books.b_design_patterns.m_chain_of_responsibility;import java.util.Random;import org.apache.commons.lang.math.RandomUtils;public class OnePeoplePlayer implements GamePlayer { private GamePlayer player; private String name ; public OnePeoplePlayer(String name,GamePlayer player) { this.player = player; this.name = name; } @Override public void gomeHandle() { try { Thread.sleep(RandomUtils.nextInt(5)); } catch (InterruptedException e) { e.printStackTrace(); } if(Drums.getInstance().getOrSetNoise(null)){ System.out.println(name + " is pass,the game is continue!"); next(); }else{ //不同的类,这里的处理过程不同 System.out.println(name + " is last people! the gome over!"); } } @Override public void next() { if(player !=null){ player.gomeHandle(); }else{ throw new RuntimeException(name); } } @Override public void setPlayer(GamePlayer player) { this.player = player; }}
package com.git.books.b_design_patterns.m_chain_of_responsibility;import org.apache.commons.lang.math.RandomUtils;public class TwoPeoplePlayer implements GamePlayer { private GamePlayer player; private String name ; public TwoPeoplePlayer(String name,GamePlayer player) { this.player = player; this.name = name; } @Override public void gomeHandle() { try { Thread.sleep(RandomUtils.nextInt(5)); } catch (InterruptedException e) { e.printStackTrace(); } if(Drums.getInstance().getOrSetNoise(null)){ System.out.println(name + " is pass,the game is continue!"); next(); }else{ //不同的类,这里的处理过程不同 System.out.println(name + " is last people! the gome over!"); } } @Override public void next() { if(player !=null){ player.gomeHandle(); }else{ throw new RuntimeException(name); } } @Override public void setPlayer(GamePlayer player) { this.player = player; }}
package com.git.books.b_design_patterns.m_chain_of_responsibility;import org.apache.commons.lang.math.RandomUtils;public class ThreePeoplePlayer implements GamePlayer { private GamePlayer player; private String name ; public ThreePeoplePlayer(String name,GamePlayer player) { this.player = player; this.name = name; } @Override public void gomeHandle() { try { Thread.sleep(RandomUtils.nextInt(5)); } catch (InterruptedException e) { e.printStackTrace(); } if(Drums.getInstance().getOrSetNoise(null)){ System.out.println(name + " is pass,the game is continue!"); next(); }else{ //不同的类,这里的处理过程不同 System.out.println(name + " is last people! the gome over!"); } } @Override public void next() { if(player !=null){ player.gomeHandle(); }else{ throw new RuntimeException(name); } } @Override public void setPlayer(GamePlayer player) { this.player = player; }}
package com.git.books.b_design_patterns.m_chain_of_responsibility;import org.apache.commons.lang.math.RandomUtils;public class FourPeoplePlayer implements GamePlayer { private GamePlayer player; private String name ; public FourPeoplePlayer(String name,GamePlayer player) { this.player = player; this.name = name; } @Override public void gomeHandle() { try { Thread.sleep(RandomUtils.nextInt(5)); } catch (InterruptedException e) { e.printStackTrace(); } if(Drums.getInstance().getOrSetNoise(null)){ System.out.println(name + " is pass,the game is continue!"); next(); }else{ //不同的类,这里的处理过程不同 System.out.println(name + " is last people! the gome over!"); } } @Override public void next() { if(player !=null){ player.gomeHandle(); }else{ throw new RuntimeException(name); } } @Override public void setPlayer(GamePlayer player) { this.player = player; }}
结构图:
重点:
理解几种形式及能识别出该模式
参考:
<<设计模式>>
<<Java与模式>>
0 0
- 设计模式之Chain of Responsibility职责链模式
- 设计模式读书笔记之职责链模式(chain of responsibility)
- 设计模式之职责链模式(Chain of Responsibility )
- 【设计模式】之 Chain of Responsibility 职责链模式
- java设计模式之职责链模式 Chain of Responsibility
- 设计模式之职责链模式(Chain of Responsibility)
- 设计模式入门之职责链模式Chain Of Responsibility
- 设计模式之职责链模式(Chain of Responsibility)摘录
- 设计模式之职责链模式(Chain Of Responsibility)
- 设计模式读书笔记之职责链模式(chain of responsibility)
- 【设计模式】行为模式之Chain of Responsibility职责链
- Chain of Responsibility(职责链设计模式)
- 设计模式之Chain of Responsibility(职责链)
- 设计模式之Chain of Responsibility(职责链)
- 设计模式之Chain of Responsibility(职责链)
- 设计模式之Chain of Responsibility(职责链)
- 设计模式之Chain of Responsibility(职责链)
- 设计模式之Chain of Responsibility(职责链)
- 成为专业程序员路上用到的各种优秀资料、神器及框架
- 常用ansible命令
- alpha测试和betal测试
- 推荐系统基础知识
- webpack入门必知必会
- 设计模式之职责链(Chain Of Responsibility)
- spring 定时任务
- 缓存和动态SQL
- Spring整合quartz
- 精灵光照(sprite Lamp)原理
- opencv 调试出现问题
- 高通LCD与TP模块间交互之callback机制(内核通知链)
- Servlet的生命周期
- java 的返回类型