深入浅出设计模式(四):6.创建者模式

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 getFactory() {
        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("劳务工")); 
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值