Java使用建造者模式实现办理手机套餐功能详解

时间:2022-10-30 10:37:29

本文实例讲述了java使用建造者模式实现办理手机套餐功能。分享给大家供大家参考,具体如下:

一、模式定义

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

二、模式举例

1 模式分析

我们借用顾客到手杌营业厅去办理手机套餐的例子说明这一模式
经过抽象分析后,我们得出下面信息
客户张三——终端需求
营业厅操作员——指导者(通知指导建造者生产什么样的手机套餐)
计算机——建造者(建造各种手机套餐)
手机套餐——产品

Java使用建造者模式实现办理手机套餐功能详解

2 建造者模式静态建模

Java使用建造者模式实现办理手机套餐功能详解

3 代码示例

3.1 创建产品——手机套餐

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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 建造者接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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 创建指导者

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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;
  }
}

让客户订购手机套餐

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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() + "\t短信:" + mobilepackage.getshortinfo() + "条\t彩玲:" + mobilepackage.getmusic());
  }
}

运行结果

--话费:20.0短信:400条彩玲:天使
--话费:30.0短信:600条彩玲:大海

三、该模式设汁原则

1 分步骤创建复杂对象
2 构造和表示分离
3 单一职责原则

四、使用场合

1 当生成产品对象内部具有复杂结构时
2 当复杂对象需要与表示分离,可能需要创建不同表示时
3 当需要向客户隐藏产品內部结构表现时

Java使用建造者模式实现办理手机套餐功能详解

希望本文所述对大家java程序设计有所帮助。

原文链接:https://blog.csdn.net/chengqiuming/article/details/70140546