Worker pattern[工作模式]
一:Worker pattern的参与者
--->Client(委托人线程)
--->Channel(通道,里边有,存放请求的队列)
--->Request(工作内容的包装)
--->Worker(工人线程)
二:Worker pattern模式什么时候使用
--->类似生产者消费者
三:Worker pattern思考
四进阶说明
--->工作线程取出请求内容包装后,根据多态,不同的请求执行不同的业务方法
Request接口
package com.yeepay.sxf.thread7;
/**
* 抽象请求
* @author sxf
*
*/
public interface Request {
//定义的抽象方法
public void eat();
}
不同Request接口的实现类
人的请求包装
package com.yeepay.sxf.thread7;
/**
* 人的请求
* @author sxf
*
*/
public class PersonRequest implements Request{
//姓名
private String name;
//事物
private String food; public PersonRequest(String name, String food) {
super();
this.name = name;
this.food = food;
} @Override
public void eat() { System.out.println("PersonRequest.eat()"+name+"吃掉"+food);
fell();
} public void fell(){
System.out.println("PersonRequest.fell()"+"我吃饱了");
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getFood() {
return food;
} public void setFood(String food) {
this.food = food;
} }
猫的请求包装
package com.yeepay.sxf.thread7;
/**
* 猫的请求
* @author sxf
*
*/
public class CatRequest implements Request{
//姓名
private String name;
//年龄
private int age; public CatRequest(String name, int age) {
super();
this.name = name;
this.age = age;
} @Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("CatRequest.eat()"+name+"有"+age+"月大"); } public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} }
模拟工作线程取出请求,执行不同的业务
package com.yeepay.sxf.thread7;
/**
* 工作线程
* @author sxf
*
*/
public class Test { public static void main(String[] args) { //模拟线程取出不同的的请求包装
Request peRequest=new PersonRequest("尚晓飞", "汉堡");
Request catRequest=new CatRequest("黑猫警长", 3);
//不同的请求包装利用多态调用方法,实现不同的业务
peRequest.eat();
catRequest.eat();
} }
打印结果
PersonRequest.eat()尚晓飞吃掉汉堡
PersonRequest.fell()我吃饱了
CatRequest.eat()黑猫警长有3月大