2023/11/3 每日总结

今天完成了设计模式实验25

实验 25:访问者模式

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

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

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

 

[实验任务一]:打包员

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

 

复制代码
package org.test25;

public class Apple implements Product{
    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }
}


package org.test25;

public class Book implements Product {
    @Override
    public void accept(Visitor visitor) {
        visitor.visit(this);
    }
}




package org.test25;

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

public class BuyBasket {
    private List<Product> productList=new ArrayList<>();
    public void accept(Visitor visitor){
        for (Product product:productList){
            product.accept(visitor);
        }
    }
    public void addProduct(Product product){
        productList.add(product);
    }
    public void removeProduct(Product product){
        productList.remove(product);
    }
}





package org.test25;

public class Client {
    public static void main(String[] args) {
        Apple apple = new Apple();
        Book book = new Book();
        BuyBasket buyBasket = new BuyBasket();
        Packager packager = new Packager("张三");
        buyBasket.addProduct(book);
        buyBasket.addProduct(apple);
        buyBasket.accept(packager);
    }
}



package org.test25;

public class Packager extends Visitor{
    public Packager(String name) {
        super(name);
    }

    @Override
    public void visit(Apple apple) {
        System.out.println(this.name+"已经打包苹果");
    }

    @Override
    public void visit(Book book) {
        System.out.println(this.name+"已经打包图书");
    }
}



package org.test25;

public interface Product {
    void accept(Visitor visitor);
}



package org.test25;

public abstract class Visitor {
    protected String name;

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public abstract void visit(Apple apple);
    public abstract void visit(Book book);
}
复制代码

 

posted @   樱花开到我身边  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示