From 499d369db32135ac4ed885d15a159dc8fdf8561a Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Tue, 5 Jun 2018 16:18:52 +0800 Subject: [PATCH] auto commit --- notes/设计模式.md | 198 +++++++++++++++++- pics/ec923dc7-864c-47b0-a411-1f2c48d084de.png | Bin 0 -> 27648 bytes 2 files changed, 196 insertions(+), 2 deletions(-) create mode 100644 pics/ec923dc7-864c-47b0-a411-1f2c48d084de.png diff --git a/notes/设计模式.md b/notes/设计模式.md index 35bddad5..dc075cf7 100644 --- a/notes/设计模式.md +++ b/notes/设计模式.md @@ -2012,9 +2012,203 @@ Tea.addCondiments ### 意图 -提供便捷的维护方式来操作一组对象。它使你在不改变操作对象的前提下,可以修改或扩展对象的行为。 +为一个对象结构(比如组合结构)增加新能力。 -例如集合,它可以包含不同类型的元素,访问者模式允许在不知道具体元素类型的前提下对集合元素进行一些操作。 +### 类图 + +- Visitor:访问者,为每一个 ConcreteElement 声明一个 visit 操作 +- ConcreteVisitor:具体访问者,存储遍历过程中的累计结果 +- ObjectStructure:对象结构,可以是组合结构,或者是一个集合。 + +

+ +### 实现 + +```java +public interface Element { + void accept(Visitor visitor); +} +``` + +```java +class CustomerGroup { + + private List customers = new ArrayList<>(); + + void accept(Visitor visitor) { + for (Customer customer : customers) { + customer.accept(visitor); + } + } + + void addCustomer(Customer customer) { + customers.add(customer); + } +} +``` + +```java +public class Customer implements Element { + + private String name; + private List orders = new ArrayList<>(); + + Customer(String name) { + this.name = name; + } + + String getName() { + return name; + } + + void addOrder(Order order) { + orders.add(order); + } + + public void accept(Visitor visitor) { + visitor.visit(this); + for (Order order : orders) { + order.accept(visitor); + } + } +} +``` + +```java +public class Order implements Element { + + private String name; + private List items = new ArrayList(); + + Order(String name) { + this.name = name; + } + + Order(String name, String itemName) { + this.name = name; + this.addItem(new Item(itemName)); + } + + String getName() { + return name; + } + + void addItem(Item item) { + items.add(item); + } + + public void accept(Visitor visitor) { + visitor.visit(this); + + for (Item item : items) { + item.accept(visitor); + } + } +} +``` + +```java +public class Item implements Element { + + private String name; + + Item(String name) { + this.name = name; + } + + String getName() { + return name; + } + + public void accept(Visitor visitor) { + visitor.visit(this); + } +} +``` + +```java +public interface Visitor { + void visit(Customer customer); + + void visit(Order order); + + void visit(Item item); +} +``` + +```java +public class GeneralReport implements Visitor { + + private int customersNo; + private int ordersNo; + private int itemsNo; + + public void visit(Customer customer) { + System.out.println(customer.getName()); + customersNo++; + } + + public void visit(Order order) { + System.out.println(order.getName()); + ordersNo++; + } + + public void visit(Item item) { + System.out.println(item.getName()); + itemsNo++; + } + + public void displayResults() { + System.out.println("Number of customers: " + customersNo); + System.out.println("Number of orders: " + ordersNo); + System.out.println("Number of items: " + itemsNo); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + Customer customer1 = new Customer("customer1"); + customer1.addOrder(new Order("order1", "item1")); + customer1.addOrder(new Order("order2", "item1")); + customer1.addOrder(new Order("order3", "item1")); + + Order order = new Order("order_a"); + order.addItem(new Item("item_a1")); + order.addItem(new Item("item_a2")); + order.addItem(new Item("item_a3")); + Customer customer2 = new Customer("customer2"); + customer2.addOrder(order); + + CustomerGroup customers = new CustomerGroup(); + customers.addCustomer(customer1); + customers.addCustomer(customer2); + + GeneralReport visitor = new GeneralReport(); + customers.accept(visitor); + visitor.displayResults(); + } +} +``` + +```html +customer1 +order1 +item1 +order2 +item1 +order3 +item1 +customer2 +order_a +item_a1 +item_a2 +item_a3 +Number of customers: 2 +Number of orders: 4 +Number of items: 6 +``` ### JDK diff --git a/pics/ec923dc7-864c-47b0-a411-1f2c48d084de.png b/pics/ec923dc7-864c-47b0-a411-1f2c48d084de.png new file mode 100644 index 0000000000000000000000000000000000000000..007e9646c05c79ed9f7dab88a33b068d40473eb1 GIT binary patch literal 27648 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 p8WzG#^gsF2G<156j+IIKjCr*_2RwCaosPy)^