java装饰者模式小结

来源:互联网 发布:网络攻击方式 编辑:程序博客网 时间:2024/05/29 07:19

装饰者模式例子
interface Worker{
  public void doSomeWork();
}

class Carpenter implements Worker{
    public void doSomeWork(){
    System.out.println("修水管");
 }
}

class Plumber implements Worker{
    public void doSomeWork(){
     System.out.println("家具制造");
 }
}

/**
*  BWorker 用来装饰 Worker实现类 Plumber类和Carpenter类
**/
class AWorker implements Worker{
    private Worker worker;
 //根据传递进来不同对象值,向上转型
 public AWorker(Worker worker){
     this.worker = worker;
 }
 
 public void doSomeWork(){
     System.out.println("你好!");
  worker.doSomeWork();
 }
}

/**
*  BWorker 用来装饰 Worker实现类 Plumber类和Carpenter类
**/
class BWorker implements Worker{
    private Worker worker;
 //根据传递进来不同对象值,向上转型
 public BWorker(Worker worker){
     this.worker = worker;
 }
 
 public void doSomeWork(){
     System.out.println("BWorker 售后服务!");
  worker.doSomeWork();
 }
}

import java.io.*;
class Test{
  public static void main(String args[]){
  Plumber plumber = new Plumber();
  //传递Plumber类对象的引用
     AWorker aWorker = new AWorker(plumber);
     aWorker.doSomeWork(); 
 
  Carpenter carpenter = new Carpenter();
  //传递Carpenter类对象的引用
  AWorker aWorker2 = new AWorker(carpenter);
  aWorker2.doSomeWork();
  
  Plumber plumber2 = new Plumber();
  //传递Plumber类对象的引用
     BWorker bWorker = new BWorker(plumber2);
     bWorker.doSomeWork(); 
 
  Carpenter carpenter2 = new Carpenter();
  //传递Carpenter类对象的引用
     BWorker bWorker2 = new BWorker(carpenter2);
     bWorker2.doSomeWork(); 
  }
}