zoukankan      html  css  js  c++  java
  • 建造者模式——办理手机套餐

    一模式定义

    建造者简单理解就是造东西,只不过建造者模式建造的不是一个简单的东西,是一个比较复杂的东西。

    二模式举例

    1模式分析

    我们借用顾客到手杌营业厅去办理手机套餐的例子说明这一模式

    经过抽象分析后,我们得出下面信息

    客户张三——终端需求

    营业厅操作员——指导者(通知指导建造者生产什么样的手机套餐)

    计算机——建造者(建造各种手机套餐)

    手机套餐——产品



     

    2建造者模式静态建模



     

    3代码示例

    3.1创建产品——手机套餐

    package com.demo.buider.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;
    	}
    
    }

     3.2建造者接口

    package com.demo.buider.itf;
    
    import com.demo.buider.model.MobilePackage;
    
    /**
     * 手机套餐Builder
     * 
     * @author
     * 
     */
    public interface IMobileBuilder
    {
    	// 建造手机套餐的话费
    	public void buildMoney();
    
    	// 建造手机套餐的短信
    	public void buildShortInfo();
    
    	// 建造手机套餐的彩玲
    	public void buildMusic();
    
    	// 返回建造的手机套餐对象
    	public MobilePackage getMobilePackage();
    }

     3.3建立具体建造者

    具体的建造者1

    package com.demo.buider.itf;
    
    import com.demo.buider.base.AbstractBasePackage;
    import com.demo.buider.model.MobilePackage;
    
    /**
     * 套餐1
     * 
     * @author maofw
     * 
     */
    public class MobileBuilderImpl1 extends AbstractBasePackage implements IMobileBuilder
    {
    	// 建造手机套餐的话费
    	public void buildMoney()
    	{
    		this.mobilePackage.setMoney(20.0f);
    	}
    
    	// 建造手机套餐的彩玲
    	public void buildMusic()
    	{
    		this.mobilePackage.setMusic("天使");
    
    	}
    
    	// 建造手机套餐的短信
    	public void buildShortInfo()
    	{
    		this.mobilePackage.setShortInfo(400);
    
    	}
    
    	// 返回建造的手机套餐对象
    	public MobilePackage getMobilePackage()
    	{
    
    		return this.mobilePackage;
    	}
    
    }

     具体的建造者2

    package com.demo.buider.itf;
    
    import com.demo.buider.base.AbstractBasePackage;
    import com.demo.buider.model.MobilePackage;
    
    /**
     * 套餐2
     * 
     * @author maofw
     * 
     */
    public class MobileBuilderImpl2 extends AbstractBasePackage implements IMobileBuilder
    {
    	// 建造手机套餐的话费
    	public void buildMoney()
    	{
    		this.mobilePackage.setMoney(30.0f);
    	}
    
    	// 建造手机套餐的彩玲
    	public void buildMusic()
    	{
    		this.mobilePackage.setMusic("大海");
    
    	}
    
    	// 建造手机套餐的短信
    	public void buildShortInfo()
    	{
    		this.mobilePackage.setShortInfo(600);
    
    	}
    
    	// 返回建造的手机套餐对象
    	public MobilePackage getMobilePackage()
    	{
    
    		return this.mobilePackage;
    	}
    
    }

     3.4创建指导者

    package com.demo.buider.director;
    
    import com.demo.buider.itf.IMobileBuilder;
    import com.demo.buider.model.MobilePackage;
    
    /**
     * 手机套餐指导者
     * 
     * @author maofw
     * 
     */
    public class MobileDirector
    {
    	public MobilePackage createMobilePackage(IMobileBuilder mobileBuilder)
    	{
    		if (mobileBuilder != null)
    		{
    			// 构建话费
    			mobileBuilder.buildMoney();
    			// 构建短信
    			mobileBuilder.buildShortInfo();
    			// 构建彩玲
    			mobileBuilder.buildMusic();
    			// 返回手机套餐
    			return mobileBuilder.getMobilePackage();
    
    		}
    		return null;
    	}
    }

     让客户订购手机套餐

    package com.demo.buider;
    
    import com.demo.buider.director.MobileDirector;
    import com.demo.buider.itf.MobileBuilderImpl1;
    import com.demo.buider.itf.MobileBuilderImpl2;
    import com.demo.buider.model.MobilePackage;
    
    public class MainApp
    {
    
    	/**
    	 * 主应用程序
    	 * 
    	 * @param args
    	 */
    	public static void main(String[] args)
    	{
    		// 创建指导者
    		MobileDirector mobileDirector = new MobileDirector();
    		// 套餐1
    		MobileBuilderImpl1 mobileBuilderImpl1 = new MobileBuilderImpl1();
    		// 套餐2
    		MobileBuilderImpl2 mobileBuilderImpl2 = new MobileBuilderImpl2();
    
    		printMessage(mobileDirector.createMobilePackage(mobileBuilderImpl1));
    
    		printMessage(mobileDirector.createMobilePackage(mobileBuilderImpl2));
    
    	}
    
    	/**
    	 * 打印输出套餐信息
    	 */
    	public static void printMessage(MobilePackage mobilePackage)
    	{
    		System.out.println("--话费:" + mobilePackage.getMoney() + "	短信:" + mobilePackage.getShortInfo() + "条	彩玲:" + mobilePackage.getMusic());
    	}
    }

     运行结果

    --话费:20.0短信:400条彩玲:天使

    --话费:30.0短信:600条彩玲:大海

    三该模式设汁原则

    1分步骤创建复杂对象

    2构造和表示分离

    3单一职责原则

    四使用场合

    1当生成产品对象内部具有复杂结构时

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

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



     

  • 相关阅读:
    C标准库函数实现
    每天一句话
    移植数码相框到arm开发板上
    数据管理
    perl 分割文件路径和文件名
    恶补英语 拿 The C programming language 练功
    英语学习 chapter1
    uboot 烧写过程
    MVC,去掉字符串中的html代码
    排序之希尔排序
  • 原文地址:https://www.cnblogs.com/ainima/p/6331647.html
Copyright © 2011-2022 走看看