• 设计模式-15-建造者模式


    简介:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    目的:

    总结:使得对象的构建与表示分离        CreateHuman和BuilderServiceImpl分离

    组成:构建器, 表示接口,接口实现

    1,基础类

    package com.design.o.builder;
    /**
     * 人体构造
     */
    public class Human {
        
        private String userName;
        
        private String head; //
        private String body; //身体
        private String hand; //
        private String foot; //
        
        public Human(String userName) {
            super();
            this.userName = userName;
        }
        
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getHead() {
            return head;
        }
    
        public void setHead(String head) {
            this.head = head;
        }
    
        public String getBody() {
            return body;
        }
    
        public void setBody(String body) {
            this.body = body;
        }
    
        public String getHand() {
            return hand;
        }
    
        public void setHand(String hand) {
            this.hand = hand;
        }
    
        public String getFoot() {
            return foot;
        }
    
        public void setFoot(String foot) {
            this.foot = foot;
        }
    
        @Override
        public String toString() {
            return userName;
        }
        
    }

    2,表示接口

    package com.design.o.builder;
    /**
     * 建造者接口
     */
    public interface BuilderService {
        
        void createHuman(String userName);
        Human getHuman();
        
        void createHead();
        void createBody();
        void createHand();
        void createFoot();
        
    }

    3,表示接口实现

    package com.design.o.builder;
    
    public abstract class BuilderServiceImpl implements BuilderService {
        
        private Human human;
        protected String bodyType;
        
        @Override
        public void createHuman(String userName) {
            human = new Human(userName);
        }
    
        @Override
        public Human getHuman() {
            
            try{
                return human;
            }finally{
                human = null;
            }
        }
    
        @Override
        public void createHead() {
            printInfo("head");
            human.setHand(bodyType + "head");
        }
    
        @Override
        public void createBody() {
            printInfo("body");
            human.setBody(bodyType + "body");
        }
    
        @Override
        public void createHand() {
            printInfo("hand");
            human.setHand(bodyType + "hand");
        }
    
        @Override
        public void createFoot() {
            printInfo("foot");
            human.setFoot(bodyType + "foot");
        }
    
        private void printInfo(String info){
            System.out.println("创建  - "+bodyType+"- 用户: " + human.getUserName() + " 的" + info);
        }
    }
    package com.design.o.builder;
    /**
     * 偏胖型 - 用户创建 
     */
    public class FatBuilderServiceImpl extends BuilderServiceImpl {
        
        private static final String BODY_TYPE = "偏胖型";
        
        public FatBuilderServiceImpl() {
            super.bodyType = BODY_TYPE;
        }
    
    }
    package com.design.o.builder;
    /**
     * 偏瘦型 - 用户创建 
     */
    public class ThinBuilderServiceImpl extends BuilderServiceImpl {
        
        private static final String BODY_TYPE = "偏瘦型";
        
        public ThinBuilderServiceImpl(){
            super.bodyType = BODY_TYPE;
        }
    
    }

    4,构建器

    package com.design.o.builder;
    /**
     * 建造者模式
     */
    public class CreateHuman {
    
        public Human createHuman(BuilderService builderService, String userName){
            
            builderService.createHuman(userName);
            builderService.createHead();
            builderService.createBody();
            builderService.createHand();
            builderService.createFoot();
            return builderService.getHuman();
        }
    }

    5,Main

    package com.design.o.builder;
    /**
     * 建造者模式
     * 
     * 目的: 使得对象的构建与表示分离        CreateHuman和BuilderServiceImpl分离
     */
    public class MainTest {
        
        public static void main(String[] args) {
            
            CreateHuman human = new CreateHuman();
            System.out.println(human.createHuman(new FatBuilderServiceImpl(), "小胖子"));;
            System.out.println(human.createHuman(new ThinBuilderServiceImpl(), "小瘦子"));;
            
        }
    
    }

    6,Result

    创建  - 偏胖型- 用户: 小胖子 的head
    创建  - 偏胖型- 用户: 小胖子 的body
    创建  - 偏胖型- 用户: 小胖子 的hand
    创建  - 偏胖型- 用户: 小胖子 的foot
    小胖子
    创建
    - 偏瘦型- 用户: 小瘦子 的head 创建 - 偏瘦型- 用户: 小瘦子 的body 创建 - 偏瘦型- 用户: 小瘦子 的hand 创建 - 偏瘦型- 用户: 小瘦子 的foot 小瘦子
  • 相关阅读:
    获取时间毫秒数
    http地址自动检测并添加URL链接
    extjs实现选择多表自定义查询功能————前台部分(ext源码)
    items中多个checkgroup在IE6下无法完整显示
    PHP压缩文件夹(ZIP)
    初始化checkboxgroup值
    下载电驴资源
    碰撞与交换
    Actionscript中MovieClip,Sprite,Shape的区别 « 檬檬前端行
    下载的ascb文件如何使用:Flash CS4 设置方法
  • 原文地址:https://www.cnblogs.com/wanhua-wu/p/7245747.html
Copyright © 2020-2023  润新知