多线程程序设计学习(9)worker pattern模式

Worker pattern[工作模式]
一:Worker pattern的参与者
--->Client(委托人线程)
--->Channel(通道,里边有,存放请求的队列)
--->Request(工作内容的包装)
--->Worker(工人线程)
       

二:Worker pattern模式什么时候使用
--->类似生产者消费者


三:Worker pattern思考


四进阶说明
--->工作线程取出请求内容包装后,根据多态,不同的请求执行不同的业务方法

 

Request接口

多线程程序设计学习(9)worker pattern模式多线程程序设计学习(9)worker pattern模式
 1 package com.yeepay.sxf.thread7;
 2 /**
 3  * 抽象请求
 4  * @author sxf
 5  *
 6  */
 7 public interface Request {
 8     //定义的抽象方法
 9     public void eat();
10 }
View Code

不同Request接口的实现类

人的请求包装

多线程程序设计学习(9)worker pattern模式多线程程序设计学习(9)worker pattern模式
 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 }
View Code

猫的请求包装

多线程程序设计学习(9)worker pattern模式多线程程序设计学习(9)worker pattern模式
 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 }
View Code

模拟工作线程取出请求,执行不同的业务

多线程程序设计学习(9)worker pattern模式多线程程序设计学习(9)worker pattern模式
 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 }
View Code

打印结果

PersonRequest.eat()尚晓飞吃掉汉堡
PersonRequest.fell()我吃饱了
CatRequest.eat()黑猫警长有3月大

 

上一篇:(单例设计模式中)懒汉式与饿汉式在多线程中的不同


下一篇:FJOI2018 部分题解