美文网首页
建造器模式

建造器模式

作者: 那年23 | 来源:发表于2019-01-05 13:10 被阅读6次

    概念

      建造器模式,是一种使用多个简单对象构造成一个复杂对象的创建型模式。当然,我首先想到的就是Android 里面AlertDialog的创建。利用了AlertDialog.builder的方式,不过这里讲的建造器模式略微有些不同。

    角色

    抽象建造者:提供了一个创建产品Product的抽象方法以及build方法。
    具体建造者:继承抽象建造者,并实现方法,以及提供一个生成Product的方法。
    产品:具体的对象。
    指挥者:用于创建的具体过程的管理。

    let's look the code

      这里假设Human的生产为例。

    产品
    public class Human {
        private String heard;
        private String body;
        private String foot;
    
        public String getHeard() {
            return heard;
        }
    
        public void setHeard(String heard) {
            this.heard = heard;
        }
    
        public String getBody() {
            return body;
        }
    
        public void setBody(String body) {
            this.body = body;
        }
    
        public String getFoot() {
            return foot;
        }
    
        public void setFoot(String foot) {
            this.foot = foot;
        }
    
        @Override
        public String toString() {
            return "Human [heard=" + heard + ", body=" + body + ", foot=" + foot + "]";
        }
    
    }
    
    抽象建造者

      提供了一系列的创建方法。

    public abstract class IBuilder {
        protected Human human = new Human();
    
        public abstract void createHeard();
    
        public abstract void createBody();
    
        public abstract void createFoot();
    
        public Human build() {
            return human;
        }
    }
    
    具体建造者

      boy:

    public class BoyBuilder extends IBuilder {
    
        @Override
        public void createHeard() {
            human.setHeard("Boy's heard");
        }
    
        @Override
        public void createBody() {
            human.setBody("Boy's body");
        }
    
        @Override
        public void createFoot() {
            human.setFoot("Boy's foot");
        }
    
    }
    

      girl:

    public class GirlBuilder extends IBuilder {
    
        @Override
        public void createHeard() {
            human.setHeard("Girl's heard");
        }
    
        @Override
        public void createBody() {
            human.setBody("Girl's body");
        }
    
        @Override
        public void createFoot() {
            human.setFoot("Girl's foot");
        }
    
    }
    
    指挥者

      这里实现了步骤的管理,当然也可以结合策略模式,来提供不同的建造步骤。

    public class Matrix {
        private IBuilder iBuilder;
    
        public Matrix(IBuilder iBuilder) {
            this.iBuilder = iBuilder;
        }
    
        public void setiBuilder(IBuilder iBuilder) {
            this.iBuilder = iBuilder;
        }
    
        public Human builder() {
            iBuilder.createHeard();
            iBuilder.createBody();
            iBuilder.createFoot();
            return iBuilder.build();
        }
    }
    
    客户端测试类
    public class BuildClient {
        public static void main(String[] args) {
            Matrix matrix = new Matrix(new BoyBuilder());
            Human human = matrix.builder();
            System.out.println(human.toString());
        }
    }
    
    结果
    总结一下

      上面例子我们也发现了建造器模式和抽象工厂模式的不同,建造器模式主要是管理建造步骤的。而且各个建造者是独立的。而这个建造器模式和AlertDialog的使用的不同点呢,其实也就是把具体单个Item的创建给暴露出来了。
    优点:建造者独立,易扩展。

    缺点:产品必须有共同点,限制了范围。

    相关文章

      网友评论

          本文标题:建造器模式

          本文链接:https://www.haomeiwen.com/subject/ugurrqtx.html