• 建造者模式


    建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

     示图代码如下:

    public abstract class Builder {
        public abstract void buildPartA();
        public abstract void buildPartB();
        public abstract Product getResult();
    }
    Builder
    public class ConcreteBuilder extends Builder {
        private Product product = new Product();
    
        @Override
        public void buildPartA() {
            product.add("部件A");
            
        }
    
        @Override
        public void buildPartB() {
            product.add("部件B");
            
        }
    
        @Override
        public Product getResult() {
            return product;
        }
        
        
    }
    ConcreteBuilder
    import java.util.ArrayList;
    import java.util.List;
    
    public class Product {
        List<String> parts = new ArrayList<String>();
        
        public void add(String part){
            parts.add(part);
        }
        
        public void show(){
            System.out.println("组成部件:	");
            for (String str : parts) {
                System.out.print(str+"	");
            }
        }
    }
    Product
    public class Director {
        public void construct(Builder builder){
            builder.buildPartA();
            builder.buildPartB();
        }
    }
    Director
    public class TestBuilder {
        public static void main(String[] args) {
            Director di = new Director();
            Builder builder = new ConcreteBuilder();
            di.construct(builder);
            Product pr = builder.getResult();
            pr.show();
        }
    }
    
    结果:
    组成部件:    
    部件A    部件B    
    test

    使用场景:

    建造者模式主要是用于创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

    使用好处:

    建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何让组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。

  • 相关阅读:
    <HTTP>ASI实现的注册方法:利用http的get和post两种方式
    <Ruby>社区服务端启动流程
    <iOS>ASIHTTPRequest和ASIDownloadCache实现本地缓存
    <iOS>关于Xcode上的Other linker flags
    <HTTP>ASI实现的登陆方法
    【pool drain】和【pool release】区别
    <UI>TableViewCELL长按事件
    <UI>UIView的autoresizingMask属性
    <UI>自定义UITableView的右侧索引
    <cocos2D>ccLabel相关
  • 原文地址:https://www.cnblogs.com/cai170221/p/13490819.html
Copyright © 2020-2023  润新知