zoukankan      html  css  js  c++  java
  • 多线程程序设计学习(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 }
    View Code

    不同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 }
    View Code

    猫的请求包装

     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

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

     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月大

  • 相关阅读:
    QuotationTools自动化脚本的部署和使用
    QuotationTool能做什么.
    【计算机原理】CPU部分.md
    【计算机原理】程序执行过程
    【大话存储II】学习笔记(18章),数据前处理和后处理
    【大话存储】学习笔记(17章),数据容灾
    【大话存储】学习笔记(20章),云存储
    【大话存储】学习笔记(16章),数据保护和备份技术
    【大话存储II】学习笔记(15章),NoSQL
    数据库(七),读写分离到CQRS
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/4665406.html
Copyright © 2011-2022 走看看