多线程程序设计学习(9)worker pattern模式
Worker pattern[工作模式]
一:Worker pattern的参与者
--->Client(委托人线程)
--->Channel(通道,里边有,存放请求的队列)
--->Request(工作内容的包装)
--->Worker(工人线程)
二:Worker pattern模式什么时候使用
--->类似生产者消费者
三:Worker pattern思考
四进阶说明
--->工作线程取出请求内容包装后,根据多态,不同的请求执行不同的业务方法
Request接口
1 package com.yeepay.sxf.thread7; 2 /** 3 * 抽象请求 4 * @author sxf 5 * 6 */ 7 public interface Request { 8 //定义的抽象方法 9 public void eat(); 10 }
不同Request接口的实现类
人的请求包装
1 package com.yeepay.sxf.thread7; 2 /** 3 * 人的请求 4 * @author sxf 5 * 6 */ 7 public class PersonRequest implements Request{ 8 //姓名 9 private String name; 10 //事物 11 private String food; 12 13 14 public PersonRequest(String name, String food) { 15 super(); 16 this.name = name; 17 this.food = food; 18 } 19 20 21 @Override 22 public void eat() { 23 24 System.out.println("PersonRequest.eat()"+name+"吃掉"+food); 25 fell(); 26 } 27 28 public void fell(){ 29 System.out.println("PersonRequest.fell()"+"我吃饱了"); 30 } 31 32 33 public String getName() { 34 return name; 35 } 36 37 38 public void setName(String name) { 39 this.name = name; 40 } 41 42 43 public String getFood() { 44 return food; 45 } 46 47 48 public void setFood(String food) { 49 this.food = food; 50 } 51 52 53 54 }
猫的请求包装
1 package com.yeepay.sxf.thread7; 2 /** 3 * 猫的请求 4 * @author sxf 5 * 6 */ 7 public class CatRequest implements Request{ 8 //姓名 9 private String name; 10 //年龄 11 private int age; 12 13 14 public CatRequest(String name, int age) { 15 super(); 16 this.name = name; 17 this.age = age; 18 } 19 20 21 @Override 22 public void eat() { 23 // TODO Auto-generated method stub 24 System.out.println("CatRequest.eat()"+name+"有"+age+"月大"); 25 26 } 27 28 29 public String getName() { 30 return name; 31 } 32 33 34 public void setName(String name) { 35 this.name = name; 36 } 37 38 39 public int getAge() { 40 return age; 41 } 42 43 44 public void setAge(int age) { 45 this.age = age; 46 } 47 48 49 50 }
模拟工作线程取出请求,执行不同的业务
1 package com.yeepay.sxf.thread7; 2 /** 3 * 工作线程 4 * @author sxf 5 * 6 */ 7 public class Test { 8 9 public static void main(String[] args) { 10 11 //模拟线程取出不同的的请求包装 12 Request peRequest=new PersonRequest("尚晓飞", "汉堡"); 13 Request catRequest=new CatRequest("黑猫警长", 3); 14 //不同的请求包装利用多态调用方法,实现不同的业务 15 peRequest.eat(); 16 catRequest.eat(); 17 } 18 19 }
打印结果
PersonRequest.eat()尚晓飞吃掉汉堡
PersonRequest.fell()我吃饱了
CatRequest.eat()黑猫警长有3月大