您的位置:首页 > 编程语言 > Java开发

深入浅出设计模式(四):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("劳务工"));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息