5

我需要编写应用程序,因为我有这样的计算:

  1. 基本费用
  2. 注册费用; 注册 %(基本费用)会因物业而异。
  3. 销售税; (基本费用+注册费)%,类似根据地点会有所不同;
  4. 服务税;(基本费+注册费+销售税)%

在此我需要配置告诉我们是否包括销售税和服务税。最后,我需要按项目计算基本费用、注册费、销售税和服务税。

我必须使用什么设计模式来实现这一点?

我对装饰器和责任链感到困惑。并且在每件事情上我都必须在那里存储相应的费用。在最后。需要列表为

Desc     Basic  Reg  Sales  Service  Total
------------------------------------------
Item 1   100    25   22     13       160 
Item 2   80     15   12     8        115
------------------------------------------
Total    180    40   34     25       275
4

2 回答 2

1

我相信装饰器模式应该符合您的要求。

于 2013-05-16T07:28:53.697 回答
0

一些例子。在这里,我假设您必须有销售税的注册费和服务税的销售税。

interface Payable {
    public float getAmount();
}

abstract class PayableDecorator implements Payable {
    private Payable base;

    public PayableDecorator(Payable base) {
        this.base = base;
    }

    public Payable getBase() {
        return base;
    }
}

class Fee implements Payable {
    private float value;

    public Fee(float value) {
        this.value = value;
    }

    public float getAmount() {
        return value;
    }
}

class RegistrationFee extends PayableDecorator {
    private float registrationPercentage;

    public RegistrationFee(Payable fee, float pct) {
        super(fee);
        registrationPercentage = pct;
    }

    public float getRegistrationPercentage() {
        return registrationPercentage();
    }

    public float getAmount() {
        return getBase() * (1 + registrationPercentage);
    }
}

class SaleTax extends PayableDecorator {
    private float salePercentage;

    public SaleTax(RegistrationFee registration, float pct) {
        super(registration);
        salePercentabe = pct;
    }

    public float getAmount() {
        return getBase() * (1 + salePercentage);
    }
}

class SericeTax extends PayableDecorator {
    private float servicePercentage;

    public SaleTax(SaleTax registration, float pct) {
        super(registration);
        salePercentabe = pct;
    }

    public float getAmount() {
        return getBase() * (1 + servicePercentage);
    }
}

使用:

Payable totalTax = new ServiceTax(new SaleTax(new RegistrationFee(new Fee(100), .1), .03), .01);
于 2013-05-17T00:17:55.580 回答