设计模式之工厂模式二

上次使用简单工厂提出了我们的解决方案,但存在一定的问题,现在我们继续改在。

需求:一零售公司,下属多个代理商,公司根据代理商的销售情况,给与其相应级别,而代理商为了更好的刺激其员工的积极性,让工资与其级别直接 挂钩,如一级代理则工资全发,二级代理则发90%,三级80%。。。。具体发放比例代理商自定,也就是说在具体计算工资前,首先要得到其对应的级别,即在工厂类里创建了对象后,需将对应的级别赋予它。假如我们用简单工厂来处理,会发现存在一定问题,见上篇。

现在我们试着进一步完善我们的方案:

 

1.工资计算规则类

package com.baihao.FactoryMethod;

public interface Salary {
 public void computerSalary();
}

2.具体代理商1:

package com.baihao.FactoryMethod;

public class ShanXiSalary implements Salary {

 private int level = 0;
 private float salary = 0;
 public int getLevel() {
  return level;
 }
 public void setLevel(int level) {
  this.level = level;
 }
 
 public float getSalary() {
  return salary;
 }
 public void setSalary(float salary) {
  this.salary = salary;
 }
 //为了讲解的方便,此处将发放比例硬编码
 @Override
 public void computerSalary() {
  System.out.println("陕西工资计算:");
  if(level == 1)
   System.out.println("张三应发工资"+salary*0.9);
  if(level == 2)
      System.out.println("张三应发工资"+salary*0.8);

 }

}

3.具体代理商2:

package com.baihao.FactoryMethod;

public class HeBeiSalary implements Salary {

 private int level = 0;
 private float salary = 0;
 public float getSalary() {
  return salary;
 }
 public void setSalary(float salary) {
  this.salary = salary;
 }
 public int getLevel() {
  return level;
 }
 public void setLevel(int level) {
  this.level = level;
 }
 //为了讲解的方便,此处将发放比例硬编码
 @Override
 public void computerSalary() {
  System.out.println("河北工资计算:");
  if(level == 1)
   System.out.println("张三应发工资"+salary*0.8);
  if(level == 2)
      System.out.println("张三应发工资"+salary*0.7);

 }

}

4.抽象工厂:

package com.baihao.FactoryMethod;

public interface Factory {
 public Salary getSalary();
}

5.具体代理商工厂1

package com.baihao.FactoryMethod;

public class ShanXiSalaryFactory implements Factory {

 @Override
 public Salary getSalary() {
  ShanXiSalary salary = new ShanXiSalary();
  salary.setLevel(2);

 salary.setSalary(10000);
  return salary;
 }

}

6.具体代理商工厂2:

package com.baihao.FactoryMethod;

public class HeBeiSalaryFactory implements Factory {

 @Override
 public Salary getSalary() {
  HeBeiSalary salary = new HeBeiSalary();
  salary.setLevel(2);

  salary.setSalary(10000);
  return salary;
 }

}

7.客户端调用:

package com.baihao.FactoryMethod;

public class Client {

 /**
  * @param args
  */
 public static void main(String[] args) {
  Salary salary = new HeBeiSalaryFactory().getSalary();
  salary.computerSalary();
  System.out.println("-----------------------------------");
  salary = new ShanXiSalaryFactory().getSalary();
  salary.computerSalary();
  
 }

}

 

这样改造后,将工厂分离出更多的小工厂,这样类的职责更明确,结构更清晰了。此方案为“工厂方法”模式

但一般单位核算工资的时候,也会对其他的方面进行核算,如:所得税,社保等,如果这样的话,以我们当前的解决方案,该怎么做呢?答案是:增加两个陕西产品类(所得税/社保),两个河北产品类(所得税/社保)、两个陕西工厂类(所得税/社保工厂)、两个河北工厂类(所得税/社保工厂)。那假如后期增加了其他的计算和代理商呢?这样的话工厂类会大爆发了。。。。。

下面我们继续对方案进行改造,见下篇“抽象 工厂”模式。

考虑可再生能源出力不确定性的商业园区用户需求响应策略(Matlab代码实现)内容概要:本文围绕“考虑可再生能源出力不确定性的商业园区用户需求响应策略”展开,结合Matlab代码实现,研究在可再生能源(如风电、光伏)出力具有不确定性的背景下,商业园区如何制定有效的需求响应策略以优化能源调度和提升系统经济性。文中可能涉及不确定性建模(如场景生成与缩减)、优化模型构建(如随机规划、鲁棒优化)以及需求响应机制设计(如价格型、激励型),并通过Matlab仿真验证所提策略的有效性。此外,文档还列举了大量相关的电力系统、综合能源系统优化调度案例与代码资源,涵盖微电网调度、储能配置、负荷预测等多个方向,形成一个完整的科研支持体系。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事能源系统规划与运行的工程技术人员。; 使用场景及目标:①学习如何建模可再生能源的不确定性并应用于需求响应优化;②掌握使用Matlab进行商业园区能源系统仿真与优化调度的方法;③复现论文结果或开展相关课题研究,提升科研效率与创新能力。; 阅读建议:建议结合文中提供的Matlab代码实例,逐步理解模型构建与求解过程,重点关注不确定性处理方法与需求响应机制的设计逻辑,同时可参考文档中列出的其他资源进行扩展学习与交叉验证。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值