计划模式之制作者模式

打印 上一主题 下一主题

主题 982|帖子 982|积分 2946

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.制作者模式概念



  • 制作者模式(builder Pattern)

    • 利用多个简朴的对象一步一步构建成一个复杂的对象,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
    • 允许用户只通过制定复杂对象的类型和内容就可以构建它们,不需要知道内部的具体构建细节

  • 焦点组成

    • Builder:抽象制作者,定义多个通用方法和构建方法
    • ConcreteBuilder:具体制作者,可以有多个
    • Director:指挥者,控制整个组合过程,将需求交给制作者,由制作者去创建对象
    • Product:产品角色

2.代码编写



  • 代码示例,以组装电脑为例子
    1. /**
    2. * 具体产品
    3. */
    4. class Computer {
    5.     private String cpu;
    6.     private String memory;
    7.     public String getCpu() {
    8.         return cpu;
    9.     }
    10.     public void setCpu(String cpu) {
    11.         this.cpu = cpu;
    12.     }
    13.     public String getMemory() {
    14.         return memory;
    15.     }
    16.     public void setMemory(String memory) {
    17.         this.memory = memory;
    18.     }
    19.     @Override
    20.     public String toString() {
    21.         return "Computer{" +
    22.                 "cpu='" + cpu + '\'' +
    23.                 ", memory='" + memory + '\'' +
    24.                 '}';
    25.     }
    26. }
    27. /**
    28. * 声明了建造者的公共方法
    29. */
    30. interface Builder {
    31.     void buildCpu();
    32.     void buildMemory();
    33.     Computer createComputer();
    34. }
    35. /**
    36. * 具体的建造者,实现builder来创建不同的产品
    37. * 低配电脑
    38. */
    39. class LowComputerBuilder implements Builder {
    40.     private Computer computer = new Computer();
    41.     @Override
    42.     public void buildCpu() {
    43.         computer.setCpu("低配 CPU");
    44.     }
    45.     @Override
    46.     public void buildMemory() {
    47.         computer.setMemory("低配 内存");
    48.     }
    49.     @Override
    50.     public Computer createComputer() {
    51.         return computer;
    52.     }
    53. }
    54. /**
    55. * 具体的建造者,实现builder来创建不同的产品
    56. * 高配电脑
    57. */
    58. class HighComputerBuilder implements Builder {
    59.     private Computer computer = new Computer();
    60.     @Override
    61.     public void buildCpu() {
    62.         computer.setCpu("高配 CPU");
    63.     }
    64.     @Override
    65.     public void buildMemory() {
    66.         computer.setMemory("高配 内存");
    67.     }
    68.     @Override
    69.     public Computer createComputer() {
    70.         return computer;
    71.     }
    72. }
    73. /**
    74. * 将产品和创建过程进行解耦,使用相同的创建过程创建不同的产品,控制产品生产过程
    75. * Director是全程指导组装过程,具体的细节还是builder去操作
    76. */
    77. class Director {
    78.     public Computer build(Builder builder) {
    79.         builder.buildCpu();
    80.         builder.buildMemory();
    81.         return builder.createComputer();
    82.     }
    83. }
    84. public class Main {
    85.     public static void main(String[] args) throws CloneNotSupportedException {
    86.         Director director = new Director();
    87.         Computer lowComputer = director.build(new LowComputerBuilder());
    88.         Computer highComputer = director.build(new HighComputerBuilder());
    89.         System.out.println(lowComputer);
    90.         System.out.println(highComputer);
    91.     }
    92. }
    复制代码
  • 优点

    • 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦
    • 每一个具体制作者都相对独立,而与其他的具体制作者无关,更加精细地控制产品的创建过程
    • 增加新的具体制作者无需修改原有类库的代码,符合开闭原则
    • 制作者模式联合链式编程来利用,代码上更加雅观

  • 缺点

    • 制作者模式所创建的产品一样平常具有较多的共同点,如果产品差别大则不建议利用

  • 制作者模式与抽象工厂模式的比较

    • 制作者模式返回一个组装好的完备产品
    • 抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品品级结构,构成了一个产品族


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表