Visitor

本文介绍了一个使用Java实现的员工薪资展示案例,通过Visitor模式来访问不同的员工类型(如职员和经理),并根据不同类型的员工打印其薪资信息。此案例展示了如何灵活地增加新的薪资打印方式。
package test0806;

import java.util.*;

abstract class employee {
    
private String name;

    
public String getName() {
        
return name;
    }


    
public void setName(String name) {
        
this.name = name;
    }


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


    
public abstract int salary();

}


interface Visitable {
    
public void Accept(Visitor v);
}


class stuff extends employee implements Visitable {

    
public stuff(String name) {
        
super(name);
    }


    @Override
    
public int salary() {
        
return 3000;
    }


    
public void Accept(Visitor v) {
        v.visitStuff(
this);
    }


}


class manager extends employee implements Visitable {

    
public manager(String name) {
        
super(name);
        
// TODO Auto-generated constructor stub
    }


    @Override
    
public int salary() {
        
// TODO Auto-generated method stub
        return 5000;
    }


    
public void Accept(Visitor v) {
        v.visitManager(
this);
    }


}


interface Visitor {
    
void visitStuff(stuff s);

    
void visitManager(manager m);
}


class salaPrintA implements Visitor {

    
public void visitManager(manager m) {
        System.out.println(m.salary());
    }


    
public void visitStuff(stuff s) {
        System.out.println(s.salary());
    }


}


class salaPrintB implements Visitor {

    
public void visitManager(manager m) {
        System.out.println(m.getName() 
+ "'s salary is " + m.salary());
    }


    
public void visitStuff(stuff s) {
        System.out.println(s.getName() 
+ "'s salary is " + s.salary());
    }


}


class employees {
    
private ArrayList col = new ArrayList();

    
private Iterator i;

    
public void add(Visitable e) {
        col.add(e);
    }


    
public void Accept(Visitor v) {
        i 
= col.iterator();
        
while (i.hasNext()) {
            
//System.out.println((i));
            
//System.out.println(i.getClass()+"DDDD");
            ((Visitable) i.next()).Accept(v);
        }

    }

}


public class VisitorTest {

    
public static void main(String[] args) {
        employees es 
= new employees();
        stuff s1 
= new stuff("s1");
        stuff s2 
= new stuff("s2");
        manager m1 
= new manager("m1");
        es.add(s1);
        es.add(s2);
        es.add(m1);
        Visitor VA 
= new salaPrintA();
        Visitor VB 
= new salaPrintB();
        es.Accept(VA);
        es.Accept(VB);
    }


}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值