访问者(Visitor)模式

本文通过一个关于性别反应的实例,深入解析了访客模式的设计思路和实现方式。介绍了如何利用抽象类和具体类来定义不同的状态反应,展示了如何在对象结构中遍历并调用这些状态反应。

课本实例:男人和女人

关键在于人只分为了男人和女人,性别的分类是稳定的,所以可以在状态类中增加‘男人反应’和‘女人反应两个方法’,方法个数稳定,不容易发生变化。 而‘人’类中只有一个方法‘接受’,获得相应的状态。对象结构类针对不同的‘状态’遍历‘男人’和‘女人’,得到不同的反应。

public abstract class Person { //人的抽象类
    //接受
    public abstract void Accept(Action visitor); //获得状态对象
}


public class Man extends Person { //男人类
    @Override
    public void Accept(Action visitor) {
        visitor.getManConclusion(this);
    }
}


public class Women extends Person { //女人类
    @Override
    public void Accept(Action visitor) {
        visitor.getWomenConclusion(this);
    }
}


public abstract class Action { //状态的抽象类

    //得到男人的结论或反应
    public abstract void getManConclusion(Man concreteElementA);
    //得到女人的结论或反应
    public abstract void getWomenConclusion(Women concreteElementA);
}


public class Success extends Action{//具体状态类:成功
    @Override
    public void getManConclusion(Man concreteElementA) {
        System.out.println("男人成功时,背后多半有一个伟大的女人");
    }

    @Override
    public void getWomenConclusion(Women concreteElementA) {
        System.out.println("女人成功时,背后多半有一个不成功的男人");
    }
}


public class Failing extends  Action{ //具体状态类:失败
    @Override
    public void getManConclusion(Man concreteElementA) {
        System.out.println("男人失败时,闷头喝酒,谁也不用劝。");
    }

    @Override
    public void getWomenConclusion(Women concreteElementA) {
        System.out.println("女人失败时,眼泪汪汪,谁也劝不了。");
    }
}


import java.util.ArrayList;
import java.util.List;
public class ObjectStructure { //对象结构
    private List<Person> elements = new ArrayList<Person>();

    public void Attach(Person pp) {  //增加
        elements.add(pp);
    }

    public void Detach(Person pp) { //移除
        elements.remove(pp);
    }

    public void Display(Action vistor) { //查看显示
        for (Person e : elements) { //针对不同状态遍历男人与女人,得到不同的反应
            e.Accept(vistor);
        }
    }
}


public class Client {
    public static void main(String[] args) {
        //在对象结构中加入要对比的男人与女人
        ObjectStructure o = new ObjectStructure();
        o.Attach(new Man());
        o.Attach(new Women());

        //成功时的反应
        Success v1 = new Success();
        o.Display(v1);
        //失败时的反应
        Failing v2 = new Failing();
        o.Display(v2);
    }
}

UML:

拓展实例:

扩展客户管理的功能(CRM)。

(1)个人客户、企业客户。

(2)提出服务申请、客户价值分析、客户对产品偏好分析等。

内容概要:本文档是一份关于交换路由配置的学习笔记,系统地介绍了网络设备的远程管理、交换机与路由器的核心配置技术。内容涵盖Telnet、SSH、Console三种远程控制方式的配置方法;详细讲解了VLAN划分原理及Access、Trunk、Hybrid端口的工作机制,以及端口镜像、端口汇聚、端口隔离等交换技术;深入解析了STP、MSTP、RSTP生成树协议的作用与配置步骤;在路由部分,涵盖了IP地址配置、DHCP服务部署(接口池与全局池)、NAT转换(静态与动态)、静态路由、RIP与OSPF动态路由协议的配置,并介绍了策略路由和ACL访问控制列表的应用;最后简要说明了华为防火墙的安全区域划分与基本安全策略配置。; 适合人群:具备一定网络基础知识,从事网络工程、运维或相关技术岗位1-3年的技术人员,以及准备参加HCIA/CCNA等认证考试的学习者。; 使用场景及目标:①掌握企业网络中常见的交换与路由配置技能,提升实际操作能力;②理解VLAN、STP、OSPF、NAT、ACL等核心技术原理并能独立完成中小型网络搭建与调试;③通过命令示例熟悉华为设备CLI配置逻辑,为项目实施和故障排查提供参考。; 阅读建议:此笔记以实用配置为主,建议结合模拟器(如eNSP或Packet Tracer)动手实践每一条命令,对照拓扑理解数据流向,重点关注VLAN间通信、路由选择机制、安全策略控制等关键环节,并注意不同设备型号间的命令差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值