23种设计模式:访问者模式

访问者模式

1.介绍

概念

在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。

主要作用

主要将数据结构与数据操作分离。

解决的问题

稳定的数据结构和易变的操作耦合问题。

使用场景

1、对象结构中对象对应的类很少改变,但经常需要在此对象结构上定义新的操作。 2、需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,也不希望在增加新操作时修改这些类。
(引用自菜鸟教程)

2.实现

背景

访问一个朋友的家,参观不同的房间。

实现步骤

1.创建Rooms接口

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

2.创建Bathroom类

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

3.创建Bedroom类

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

4.创建Livingroom类

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

5.创建Visitor接口

public interface Visitor {
    public void visit(FriendHome friendHome);

    public void visit(Bathroom bathroom);

    public void visit(Bedroom bedroom);

    public void visit(Livingroom livingroom);
}

6.创建VisitorIsMe类

public class VisitorIsMe implements Visitor{

    @Override
    public void visit(FriendHome friendHome) {
        System.out.println("参观朋友的家...");
    }

    @Override
    public void visit(Bathroom bathroom) {
        System.out.println("参观厕所...");
    }

    @Override
    public void visit(Bedroom bedroom) {
        System.out.println("参观卧室...");
    }

    @Override
    public void visit(Livingroom livingroom) {
        System.out.println("参观客厅...");
    }
}

7.创建测试类

public class VisitorPatternDemo {
    public static void main(String[] args) {
        FriendHome friendHome = new FriendHome();
        friendHome.accept(new VisitorIsMe());
    }
}

6.运行结果

参观朋友的家…
参观厕所…
参观卧室…
参观客厅…

posted @ 2021-09-25 16:39  Dawnlight-_-  阅读(40)  评论(0编辑  收藏  举报