zoukankan      html  css  js  c++  java
  • 建造者模式

    建造者模式和工厂模式的不同在于,工厂模式产生的对象都是模板化的,没有特性。建造者意在让用户创建个性特点的对象。java与模式一书中有个例子特别生动。女娲造人,但是人有四肢,头颅,身体等部件。女娲自己造任务太多,且达不到个性化。于是女娲将造人拆分为多个任务,分别交给不同的神。有的神专门做头颅,有的神专门做四肢。下面代码是精简版本。在Builder类中,创建一个Person对象,但是这个Person没有任何的属性。我们通过调用Builder对象的各个方法,来完善人的四肢,头颅。我们不传Head,那这个人就没有头。

    package builder_k;/*
    * @auther 顶风少年 
    * @mail dfsn19970313@foxmail.com
    * @date 2020-01-15 19:56
    * @notify 
    * @version 1.0
    */
    public class Person {
    
        private Head head;
        private Body body;
        private Limb limb;
    
        public Head getHead() {
            return head;
        }
    
        public void setHead(Head head) {
            this.head = head;
        }
    
        public Body getBody() {
            return body;
        }
    
        public void setBody(Body body) {
            this.body = body;
        }
    
        public Limb getLimb() {
            return limb;
        }
    
        public void setLimb(Limb limb) {
            this.limb = limb;
        }
    }
    View Code
    package builder_k;/*
    * @auther 顶风少年 
    * @mail dfsn19970313@foxmail.com
    * @date 2020-01-15 20:00
    * @notify 
    * @version 1.0
    */
    public class Head {
    }
    View Code
    package builder_k;/*
    * @auther 顶风少年 
    * @mail dfsn19970313@foxmail.com
    * @date 2020-01-15 20:00
    * @notify 
    * @version 1.0
    */
    public class Body {
    }
    View Code
    package builder_k;/*
    * @auther 顶风少年 
    * @mail dfsn19970313@foxmail.com
    * @date 2020-01-15 20:01
    * @notify 
    * @version 1.0
    */
    public class Limb {
    }
    View Code
    package builder_k;/*
     * @auther 顶风少年
     * @mail dfsn19970313@foxmail.com
     * @date 2020-01-15 19:56
     * @notify
     * @version 1.0
     */
    
    public class Builder {
        private Person person = new Person();
    
        public Builder setHead(Head head) {
            person.setHead(head);
            return this;
        }
    
        public Builder setBody(Body body) {
            person.setBody(body);
            return this;
        }
    
        public Builder setLimb(Limb limb) {
            person.setLimb(limb);
            return this;
        }
    
        public Person build() {
            return person;
        }
    }
    View Code
    package builder_k;/*
    * @auther 顶风少年 
    * @mail dfsn19970313@foxmail.com
    * @date 2020-01-15 20:03
    * @notify 
    * @version 1.0
    */
    public class Main {
        public static void main(String[] args) {
            Builder builder = new Builder();
            builder.setBody(new Body());
            builder.setHead(new Head());
            builder.setLimb(new Limb());
        }
    }
    View Code

  • 相关阅读:
    MWC飞控增加声纳定高的方法(转)
    c语言字符串分割函数(转)
    移动端IM系统的协议选型:UDP还是TCP?(转)
    如何编写Linux设备驱动程序(转)
    TCP连接探测中的Keepalive和心跳包(转)
    为什么说基于TCP的移动端IM仍然需要心跳保活?(转)
    基于 FPGA 的图像边缘检测(转)
    NTC热敏电阻基础以及应用和选择(转)
    通用CRC32校验程序,可完美匹配STM32硬件CRC算法(转)
    MAX31855 热电偶至数字输出转换器
  • 原文地址:https://www.cnblogs.com/zumengjie/p/12198583.html
Copyright © 2011-2022 走看看