装饰模式实例复杂的奖金计算

简介: 装饰模式实例复杂的奖金计算

复杂的奖金计算

奖金分类,对于个人有当月奖金、个人累计奖金、个人业务增长奖金、及时回款奖金、限时成交加码奖金等;对于业务主管或者是业务经理,除了个人奖金外,还有团队累积奖金、团队业务增长奖金、团队盈利奖金等。

计算公式也有不同

计算奖金金额的基数也有不同

奖金的计算方式会经常变化。要适于调整和修改
在这里插入图片描述
成员接口

package A;
 
public abstract class Component {
 
public abstract double pay();
 
}

人,两个属性在,职务和姓名

package A;
 
public class Person extends Component {
 
    private String name;
    private String position;
    
    public Person() {
    }
 
    public Person(String name, String position) {
        
        this.name = name;
        this.position = position;
    }
   
    public double pay() {
        System.out.print(position+name+"累计奖金为");
        return 0;
    }
 
}

奖金的装饰类

package A;
 
public class Wage extends Component {
 
    protected Component component;
    public void Decorator(Component component)
    {this.component=component;
 
}
    public double pay()
    {if(component!=null)
        return component.pay();
    else
        return 0;
    }
}

当月奖金,一个属性,奖金数额

package A;
 
public class Month extends Wage {
private double money;
 
public Month() {
    
}
 
public Month(double money) {
    
    this.money = money;
}
 
public double pay()//月奖金
{System.out.print("月奖金 "+money+"元 ");
    return super.pay()+money;
}
}

业务增长奖金,一个 属性,业务增长额,计算公式为业务增长额乘0.2

package A;
 
public class Increase extends Wage{
    private double yewue;
    
    public Increase() {
    
    }
 
    public Increase(double yewue) {
    
        this.yewue = yewue;
    }
 
    public double pay()
    {System.out.print("个人业务增长奖金 "+yewue*0.2+"元 ");
    return super.pay()+yewue*0.2;
    }
}

团队奖金一个属性,奖金额

package A;
 
public class Team extends Wage {
    private double money;
    
public Team() {
        
    }
 
public Team(double money) {
    
        this.money = money;
    }
 
public double pay()
{System.out.print("团队增长奖金"+money+"元 ");
return super.pay()+money;
}
}

团队增长奖金,一个属性,增长值,公式为增长值乘0.5

package A;
 
public class TeamIncrease extends Wage {
    private double zengzhang;
    
public TeamIncrease() {
        
    }
 
public TeamIncrease(double zengzhang) {
        
        this.zengzhang = zengzhang;
    }
 
public double pay()
{System.out.print("团队增长奖金"+zengzhang*0.5+"元 ");
return super.pay()+zengzhang*0.5;
}
}

测试

package A;
 
public class Test {
public static void main(String args[])
{Person xc=new Person("小李","程序员");
Person xd=new Person("老王","团队经理");
Month mo=new Month(3000);
Increase in=new Increase(1500);
mo.Decorator(xc);
in.Decorator(mo);
Team tm=new Team(5000);
TeamIncrease ti=new TeamIncrease(2000);
tm.Decorator(xd);
ti.Decorator(tm);
System.out.println(in.pay()+"元");
System.out.println(ti.pay()+"元");
}
}
目录
相关文章
|
前端开发 算法 开发工具
Git分支批量清理利器:自定义命令行插件实战
Git分支批量清理利器:自定义命令行插件实战
247 0
【计算机网络】网络层 : IP 数据报分片 ( 数据分片机制 | 分片示例 | 三种数据长度单位 )
【计算机网络】网络层 : IP 数据报分片 ( 数据分片机制 | 分片示例 | 三种数据长度单位 )
1615 0
【计算机网络】网络层 : IP 数据报分片 ( 数据分片机制 | 分片示例 | 三种数据长度单位 )
|
7月前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
316 25
|
机器人 Shell Python
ROS2教程05 ROS2服务
这篇文章是关于ROS2(Robot Operating System 2)服务的教程,涵盖了服务的概念、特性、命令行工具的使用,以及如何编写服务的服务器和客户端代码,并提供了测试服务通信机制的示例。
404 4
ROS2教程05 ROS2服务
|
Linux Windows
Centos7安装wps办公软件
Centos7安装wps办公软件
301 0
|
存储 监控 关系型数据库
MySQL普通表转换为分区表实战指南
MySQL普通表转换为分区表实战指南
|
机器学习/深度学习 人工智能 前端开发
新一代前端开发工具——基于人工智能的代码生成器
【2月更文挑战第2天】本文介绍了一种新型前端开发工具——基于人工智能技术的代码生成器,通过分析用户需求和设计稿,自动生成高质量前端代码,极大地提升了开发效率和质量。
|
Go 索引
Golang深入浅出之-切片(Slices)入门:创建、操作与扩容机制
【4月更文挑战第20天】Go语言中的切片是动态数组,提供灵活的操作和自动扩容。本文介绍了切片的创建(通过`make()`、数组创建和切片字面量)、基本操作(索引访问、切片、赋值追加和遍历)以及扩容机制(首次和后续扩容策略)。此外,还强调了切片与底层数组的关系、切片越界问题、`append()`的使用以及理解切片的关键点,帮助提升Go编程效率和代码质量。
314 0
|
测试技术 数据库
软件设计原则-依赖倒置原则讲解以及代码示例
依赖倒置原则(Dependency Inversion Principle,DIP)是面向对象设计中的一个重要原则,由Robert C. Martin提出。 依赖倒置原则的核心思想是:高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于具体实现细节,而具体实现细节应该依赖于抽象。这意味着我们在进行系统设计时,应该尽量使用抽象类或接口来定义对象之间的依赖关系,而不是直接依赖于具体的实现类
785 0
|
SQL 关系型数据库 MySQL
PolarDB-X 与 DRDS 有什么区别?1
PolarDB-X 与 DRDS 有什么区别?1
283 1