学习记录320@Java策略枚举案例

策略枚举:这种枚举通过枚举嵌套枚举的方式,将枚举常量分类处理。
案例:计算不同职位的人的工资,虽然职位不同,但是不同职位的人的工作类型可能是相同的,同类型的人的工资计算方式是一样;
JAVA和PYTHON老师的工资计算方式都属于TEACHER,TEACHER老师类型是基本工资+课时费+绩效奖励
校长的工资计算方式ADMINISTRATION,ADMINISTRATION行政类型是基本工资+绩效奖励

package com.dream.test05;

public enum Salary {
    
    
//	不同情况属于不同的工资计算方式
	JAVA(Type.TEACHER),
	PYTHON(Type.TEACHER),
	PRINCIPAL(Type.TEACHER);
	
	private Type type;

	private Salary() {
    
    
	}


	private Salary(Type type) {
    
    
		this.type = type;
	}


	public Type getType() {
    
    
		return type;
	}


	public void setType(Type type) {
    
    
		this.type = type;
	}
//	计算工资
	double getSalary(double baseSalary,int classHour,double teachingHourSubsidy,double achievements){
    
    
		return type.getSalary(baseSalary, classHour, teachingHourSubsidy, achievements);
	}

	//每个类型的工资计算方式不同
//	TEACHER老师类型是基本工资+课时费+绩效奖励
//	ADMINISTRATION行政类型是基本工资+绩效奖励
	
	enum Type{
    
    
		
		TEACHER {
    
    
			@Override
			double getSalary(double baseSalary, int classHour, double teachingHourSubsidy, double achievements) {
    
    
				// TODO Auto-generated method stub
				return baseSalary+classHour*teachingHourSubsidy+achievements;
			}
		},
		ADMINISTRATION {
    
    
			@Override
			double getSalary(double baseSalary, int classHour, double teachingHourSubsidy, double achievements) {
    
    
				// TODO Auto-generated method stub
				return baseSalary+achievements;
			}
		};
		
		abstract double getSalary(double baseSalary,int classHour,double teachingHourSubsidy,double achievements);
	}
}

package com.dream.test05;

public class Test01 {
    
    

	public static void main(String[] args) {
    
    
		System.out.println("JAVA老师工资"+Salary.JAVA.getSalary(1000, 80, 10, 100));
		System.out.println("PYTHON老师工资"+Salary.PYTHON.getSalary(500, 80, 10, 100));
		System.out.println("校长工资"+Salary.PRINCIPAL.getSalary(1000, 8, 10, 1000));
		
	}

}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44663675/article/details/108984263