博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式那点事读书笔记(3)----建造者模式
阅读量:4326 次
发布时间:2019-06-06

本文共 3888 字,大约阅读时间需要 12 分钟。

建造者模式: 建造者模式是将复杂的对象构造进行分离,使得每个部件完成比较独立的工作.通过抽象类,接口来约束建造的过程.

解决什么问题: 

  当生成的产品对象内部具有复杂的结构.

  当复杂对象需要与表示分离,可能需要创建不同的表示时.

  当需要向客户隐藏产品内部结构表现时.

UML:

  

代码结构:

  

商品的实体:

package com.demo.builder.model;/** * 产品实体 */public class MobilePackage {    private float money;    private int shortInfo;    private String music;    public float getMoney() {        return money;    }    public void setMoney(float money) {        this.money = money;    }    public int getShortInfo() {        return shortInfo;    }    public void setShortInfo(int shortInfo) {        this.shortInfo = shortInfo;    }    public String getMusic() {        return music;    }    public void setMusic(String music) {        this.music = music;    }}

建造者的抽象类:

package com.demo.builder.base;import com.demo.builder.model.MobilePackage;/** * 建造者抽象类 */public abstract class AbstractBasePackage {    protected MobilePackage mobilePackage;    public AbstractBasePackage() {        this.mobilePackage = new MobilePackage();    }}

抽象建造者的行为:

package com.demo.builder.itf;import com.demo.builder.model.MobilePackage;/** * 抽象建造者行为 */public interface IMobileBuilder {    void buildMoney();    void buildShortInfo();    void buildMusic();    MobilePackage getMobilePackage();}

建造者实体1:

package com.demo.builder.itf;import com.demo.builder.base.AbstractBasePackage;import com.demo.builder.model.MobilePackage;/** * 建造者实体1 */public class MobileBuilderImpl1 extends AbstractBasePackage implements IMobileBuilder{    @Override    public void buildMoney() {        this.mobilePackage.setMoney(20.0f);    }    @Override    public void buildShortInfo() {        this.mobilePackage.setShortInfo(400);    }    @Override    public void buildMusic() {        this.mobilePackage.setMusic("歌曲1");    }    @Override    public MobilePackage getMobilePackage() {        return this.mobilePackage;    }}

建造者的实体2:

package com.demo.builder.itf;import com.demo.builder.base.AbstractBasePackage;import com.demo.builder.model.MobilePackage;/** * 建造者类2 */public class MobileBuilderImpl2 extends AbstractBasePackage implements IMobileBuilder{    @Override    public void buildMoney() {        this.mobilePackage.setMoney(30.0f);    }    @Override    public void buildShortInfo() {        this.mobilePackage.setShortInfo(600);    }    @Override    public void buildMusic() {        this.mobilePackage.setMusic("歌曲2");    }    @Override    public MobilePackage getMobilePackage() {        return this.mobilePackage;    }}

指导者:

package com.demo.builder.director;import com.demo.builder.itf.IMobileBuilder;import com.demo.builder.model.MobilePackage;/** * 建造指导者 */public class MobileDirector {    public MobilePackage createMobilePackage(IMobileBuilder mobileBuilder) {        if (mobileBuilder != null) {            mobileBuilder.buildMoney();            mobileBuilder.buildMusic();            mobileBuilder.buildShortInfo();            return mobileBuilder.getMobilePackage();        }        return null;    }}

实现方法:

package main;import com.demo.builder.director.MobileDirector;import com.demo.builder.itf.MobileBuilderImpl1;import com.demo.builder.itf.MobileBuilderImpl2;import com.demo.builder.model.MobilePackage;/** * Created by Administrator on 2016/8/8. */public class MainApp {    public static void main(String[] args) {        MobileDirector mobileDirector = new MobileDirector();        MobileBuilderImpl1 mobileBuilderImpl1 = new MobileBuilderImpl1();        MobileBuilderImpl2 mobileBuilderImpl2 = new MobileBuilderImpl2();        printMessage(mobileDirector.createMobilePackage(mobileBuilderImpl1));        printMessage(mobileDirector.createMobilePackage(mobileBuilderImpl2));    }    public static void printMessage(MobilePackage mobilePackage) {        System.out.println("--话费: " + mobilePackage.getMoney() + "\t短信: " + mobilePackage.getShortInfo() + "\t彩铃: " + mobilePackage.getMusic());    }}

  

转载于:https://www.cnblogs.com/arctique/p/5751303.html

你可能感兴趣的文章
08.CXF发布WebService(Java项目)
查看>>
java-集合框架
查看>>
RTMP
查看>>
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
RobotFramework自动化2-自定义关键字
查看>>
[置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
查看>>
BABOK - 需求分析(Requirements Analysis)概述
查看>>
第43条:掌握GCD及操作队列的使用时机
查看>>
Windows autoKeras的下载与安装连接
查看>>
CMU Bomblab 答案
查看>>
微信支付之异步通知签名错误
查看>>
2016 - 1 -17 GCD学习总结
查看>>
linux安装php-redis扩展(转)
查看>>
Vue集成微信开发趟坑:公众号以及JSSDK相关
查看>>
技术分析淘宝的超卖宝贝
查看>>
i++和++1
查看>>
react.js
查看>>
P1313 计算系数
查看>>