12.16日报

今天完成设计模式实验二十五访问者模式,以下为实验内容:

实验 25:访问者模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解访问者模式的动机,掌握该模式的结构;

2、能够利用访问者模式法解决实际问题。

 
   

 

 

[实验任务一]:打包员

在我们课堂上的“购物车”的例子中,增加一个新的访问者:打包员,负责对购物车中货物装包。

实验要求:

1.  画出对应的类图;

 

2.  提交源代码;

  1. import java.util.ArrayList;
    import java.util.List;

    // 访问者接口
    interface Visitor {
        void visit(ItemA itemA);
        void visit(ItemB itemB);
    }

    // 打包员访问者
    class Packer implements Visitor {
        @Override
        public void visit(ItemA itemA) {
            System.out.println("Packing " + itemA.getName() + " in box.");
        }

        @Override
        public void visit(ItemB itemB) {
            System.out.println("Packing " + itemB.getName() + " in bubble wrap.");
        }
    }

    // 购物车项接口
    interface Item {
        void accept(Visitor visitor);
        String getName();
    }

    // 具体购物车项A
    class ItemA implements Item {
        private String name;

        public ItemA(String name) {
            this.name = name;
        }

        @Override
        public String getName() {
            return name;
        }

        @Override
        public void accept(Visitor visitor) {
            visitor.visit(this);
        }
    }

    // 具体购物车项B
    class ItemB implements Item {
        private String name;

        public ItemB(String name) {
            this.name = name;
        }

        @Override
        public String getName() {
            return name;
        }

        @Override
        public void accept(Visitor visitor) {
            visitor.visit(this);
        }
    }

    // 购物车
    class ShoppingCart {
        private List<Item> items = new ArrayList<>();

        public void add(Item item) {
            items.add(item);
        }

        public void remove(Item item) {
            items.remove(item);
        }

        public void accept(Visitor visitor) {
            for (Item item : items) {
                item.accept(visitor);
            }
        }
    }

    // 客户端测试类
    public class VisitorPatternTest {
        public static void main(String[] args) {
            ShoppingCart cart = new ShoppingCart();
            cart.add(new ItemA("Apple"));
            cart.add(new ItemB("Laptop"));

            Visitor packer = new Packer();
            cart.accept(packer);
        }
    }

 

3. 注意编程规范。

 

 

 

posted @ 2024-12-17 16:19  Code13  阅读(13)  评论(0)    收藏  举报