ede3954d创建于 2021年3月5日历史提交
// patterns/CleanTheFloor.java
// (c)2021 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// State with different compositional interface.

class FloorCleaner {
  private Attachment attachment = new Vacuum();
  public void change(Attachment newAttachment) {
    attachment = newAttachment;
  }
  public void clean() { attachment.action(); }
}

interface Attachment {
  void action();
}

class Vacuum implements Attachment {
  @Override public void action() {
    System.out.println("Vacuuming");
  }
}

class Mop implements Attachment {
  @Override public void action() {
    System.out.println("Mopping");
  }
}

public class CleanTheFloor {
  public static void main(String[] args) {
    FloorCleaner floorCleaner = new FloorCleaner();
    floorCleaner.clean();
    floorCleaner.change(new Mop());
    floorCleaner.clean();
  }
}
/* Output:
Vacuuming
Mopping
*/