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

来源:互联网 发布:什么是淘宝企业店铺 编辑:程序博客网 时间:2024/06/08 11:52

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("劳务工"));     }}
0 0
原创粉丝点击