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与模式>>