深入浅出设计模式(四):6.创建者模式
2016-01-12 16:40
507 查看
6.创建者模式(Builder)
在抽象工厂模式中,一个具体的工厂类负责创建一系列相互关联的对象,但此时工厂类的职责并不单一,如果组装变得复杂,则工厂类将会变得很庞大,不利于维护。创建者模式就是将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示,而且客户端不用知道对象的构建细节。创建者模式的实现原理
创建者模式在薪酬模块的实际应用
在薪酬模块中,需要对员工的基本工资、奖金、保险、个人所得税等进行计算,而且需要区分不同的工种,比如劳务工、合同工等。Factory
//抽象工厂类 public abstract class Factory { protected abstract BasePay getBasePay(); protected abstract Bonus getBonus(); }
ContractFactory
//定义合同工的工厂类 public class ContractFactory extends Factory { public BasePay getBasePay(){ return new ContractBasePay(); } public Bonus getBonus(){ return new ContractBonus(); } }
WorkerFactory
//劳务工的工厂类 public class WorkerFactory extends Factory { public BasePay getBasePay(){ return new WorkerBasePay(); } public Bonus getBonus(){ return new WorkerBonus(); } }
BasePay
// 薪资计算(产品)接口 public interface BasePay { public String doBasePay(String name); }
ContractBasePay
// 合同工的薪资计算(产品)实现类 public class ContractBasePay implements BasePay { @Override public String doBasePay(String name) { // TODO Auto-generated method stub return name + "基本工资开始计算"; } }
WorkerBasePay
//劳务工的信自己算(产品)实现类 public class WorkerBasePay implements BasePay { @Override public String doBasePay(String name) { return name + "基本工资开始计算"; } }
Bonus
//奖金计算(产品)的接口类 public interface Bonus { public String doBonus(String name); }
ContractBonus
//合同工的奖金计算(产品)实现类 public class ContractBonus implements Bonus { @Override public String doBonus(String name) { // TODO Auto-generated method stub return name + "奖金开始计算"; } }
WorkerBonus
//劳务工的奖金计算(产品)实现类 public class WorkerBonus implements Bonus { @Override public String doBonus(String name) { // TODO Auto-generated method stub return name + "奖金开始计算"; } }
Director
//定义创建者类 public class Director { private Factory factory; public Factory ge 4000 tFactory() { return factory; } public void setFactory(Factory factory) { this.factory = factory; } /** * 薪资计算过程 */ public String doSalary(String name){ BasePay basePay = factory.getBasePay(); Bonus bonus = factory.getBonus(); return basePay.doBasePay(name) + "---" + "---" + bonus.doBonus(name) ; } }
Client
public class Client { public static void main (String[] args) { Director director = new Director(); director.setFactory(new WorkerFactory()); System.out.println(director.doSalary("劳务工")); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序