• 【设计模式】—— 创建者模式Builder


      前言:【模式总览】——————————by xingoo

      模式意图

      一个对象的创建十分复杂,为了区分构建过程和使用过程,因此分开。使用一个Director类进行对象的创建,Builder规定了这个创建过程。

      模式结构

      Builder 抽象建造者接口,规范各个组成部分的构建。

      ConcreteBuilder 具体建造者角色,实现组成部分的构建,并提供示例。

      Product 产品角色,创建返回的对象。

      Director 导演者角色,负责创建以及使用。

      使用场景

      1 当创建对象复杂并且与其使用过程独立。

      2 构造过程允许构造的对象有不同的表示。

      代码结构

      Builder接口

    1 abstract class Builder{
    2     public abstract void buildPart1();
    3     public abstract void buildPart2();
    4     public abstract Product retrieveResult();
    5 }

      ConcreteBuilder 具体产品

     1 class ConcreteBuilder extends Builder{
     2     public void buildPart1() {
     3         
     4     }
     5     public void buildPart2() {
     6         
     7     }
     8     public Product retrieveResult() {
     9         return null;
    10     }
    11 }

      Product 产品

    1 class Product{
    2     //Anything
    3 }

      Director 导演者角色

    1 class Director{
    2     private Builder builder;
    3     public void Constructor(){
    4         builder = new ConcreteBuilder();
    5         builder.buildPart1();
    6         builder.buildPart2();
    7         builder.retrieveResult();
    8     }
    9 }

      生活中的设计模式

      

    ‘  近年来,变形金刚4出了也快半年了,但是还是喜欢第一部的女主角。

      而擎天柱队长,经典的台词,“汽车人变身”也是伴随着复杂的变化过程。而汽车人的转变只在一瞬之间,看起来行云流水,这就有点创建者的味道。擎天柱的各个身体部分经过复杂的变化,最后变身成为汽车人。

      

     1 /**
     2  * Builder
     3  */
     4 interface Transformer{
     5     public void Create_Head();
     6     public void Create_Body();
     7     
     8     public Autobots transforming();
     9 }
    10 /**
    11  * ConcreteBuilder
    12  */
    13 class Transformer_Captain implements Transformer{
    14     public void Create_Head() {
    15         System.out.println("变形出脑袋...");
    16     }
    17     public void Create_Body() {
    18         System.out.println("变形出身体...");
    19     }
    20     public Autobots transforming() {
    21         return new Autobots();
    22     }
    23 }
    24 /**
    25  * Product
    26  */
    27 class Autobots{
    28      Autobots(){
    29         System.out.println("啊!...变形金刚 变身....");
    30     }
    31 }
    32 /**
    33  * 这个类当做Director
    34  */
    35 public class TransformerBuilder {
    36     
    37     public static Autobots Transforming(Transformer optimusPrime){
    38         optimusPrime.Create_Head();
    39         optimusPrime.Create_Body();
    40         return optimusPrime.transforming();
    41     }
    42     
    43     public static void main(String[] args){
    44         Transformer optimusPrime = new Transformer_Captain();
    45         Transforming(optimusPrime);
    46     }
    47     
    48 }

      变身结果

    变形出脑袋...
    变形出身体...
    啊!...变形金刚 变身....

      

  • 相关阅读:
    Android Studio 快捷键、Debug的使用
    android 控件获取 获取焦点
    jquery里面获取div区块的宽度与高度
    C# ASP.NET MVC 配置允许跨域访问
    分页跳转计算公式
    在vue-cli3 中import引入一个没有export default{}的js文件
    vue中引入css文件
    Vue 导入文件import、路径@和.的区别
    npm 如何查看一个包的版本信息?
    Chrome浏览器常用键盘快捷键介绍
  • 原文地址:https://www.cnblogs.com/xing901022/p/4046715.html
Copyright © 2020-2023  润新知