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

  • 相关阅读:
    东芝线阵CCD芯片TCD1305DG驱动时序设计
    数字电路中应避免产生不必要的锁存器 Latch
    准双向口、开漏输出、推挽输出结构介绍
    边沿检测电路小结
    数字系统中的亚稳态及其解决办法
    launch edge 和 latch edge 延迟
    基于Verilog的偶数、奇数、半整数分频以及任意分频器设计
    找到了救命的东西 NVIDIA MPS (multi-process service)
    关于多个程序同时launch kernels on the same GPU
    java的System.currentTimeMillis()和System.nanoTime()
  • 原文地址:https://www.cnblogs.com/zumengjie/p/12198583.html
Copyright © 2011-2022 走看看