• builder-设计模式


    package com.wp.java.builder;
    
    import org.junit.Test;
    
    
    public class DoDoContactDemo {
        
        @Test
        public void test(){
            DoDoContact contact = new DoDoContact.Builder("jack").address("lundun").safeID(5).age(10).build();
            
        }
    }
    
    class DoDoContact {
        private  int age;
        private  int safeID;
        private  String name;
        private String address;
        
        public int getAge() {
            return age;
        }
        public int getSafeID() {
            return safeID;
        }
        public String getName() {
            return name;
        }
        public String getAddress() {
            return address;
        }
        
         static class Builder{
             private int age=0;
             private int safeID =0;
             private String name=null;
             private String address = null;
             
             public Builder(String name){
                 this.name = name;
             }
             
             public Builder age(int age){
                 this.age = age;
                 return this;
             }
             
             public Builder safeID(int safeID){
                 this.safeID = safeID;
                 return this;
             }
             
             public Builder address(String address){
                 this.address = address;
                 return this;
             }
             
             public DoDoContact build(){
                 return new DoDoContact(this);
             }
         }
         
         private DoDoContact(Builder b){
             age = b.age;
             name = b.name;
             safeID = b.safeID;
             address = b.address;
         }
         
    }
    package com.wp.java.builder;
    
    import org.junit.Test;
    /**
     * Builder 模式
     * */
    public class CardDemo {
        @Test
        public void test(){
            Card con = new ConcreteCard();
            Director dir = new Director(con);
            dir.construct();
        }
    }
    
    interface Card {
        void createPardA();
        void createPardB();
        void createPardC();
    }
    
    class ConcreteCard implements Card{
    
        @Override
        public void createPardA() {
            
        }
    
        @Override
        public void createPardB() {
            
        }
    
        @Override
        public void createPardC() {
            
        }
    
    }
    
    class Director {
        private Card card;
    
        public Director(Card card) {
            super();
            this.card = card;
        }
        
        public void construct(){
            card.createPardA();
            card.createPardB();
            card.createPardC();
        }
    }

    上面都是简单的测试案例,下面将接触到的框架中原样,Universal-Image-Loader,相信有部分搞android开发的哥们是有点眼熟的,看代码吧

    package com.nostra13.universalimageloader.core;
    
    import android.content.res.Resources;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory.Options;
    import android.graphics.drawable.Drawable;
    import android.os.Handler;
    import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
    import com.nostra13.universalimageloader.core.assist.ImageScaleType;
    import com.nostra13.universalimageloader.core.display.BitmapDisplayer;
    import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
    import com.nostra13.universalimageloader.core.download.ImageDownloader;
    import com.nostra13.universalimageloader.core.process.BitmapProcessor;
    
    public final class DisplayImageOptions {
    
        private final int imageResOnLoading;
        private final int imageResForEmptyUri;
        private final int imageResOnFail;
        private final Drawable imageOnLoading;
        private final Drawable imageForEmptyUri;
        private final Drawable imageOnFail;
        private final boolean resetViewBeforeLoading;
        private final boolean cacheInMemory;
        private final boolean cacheOnDisk;
        private final ImageScaleType imageScaleType;
        private final Options decodingOptions;
        private final int delayBeforeLoading;
        private final boolean considerExifParams;
        private final Object extraForDownloader;
        private final BitmapProcessor preProcessor;
        private final BitmapProcessor postProcessor;
        private final BitmapDisplayer displayer;
        private final Handler handler;
        private final boolean isSyncLoading;
    
        private DisplayImageOptions(Builder builder) {
            imageResOnLoading = builder.imageResOnLoading;
            imageResForEmptyUri = builder.imageResForEmptyUri;
            imageResOnFail = builder.imageResOnFail;
            imageOnLoading = builder.imageOnLoading;
            imageForEmptyUri = builder.imageForEmptyUri;
            imageOnFail = builder.imageOnFail;
            resetViewBeforeLoading = builder.resetViewBeforeLoading;
            cacheInMemory = builder.cacheInMemory;
            cacheOnDisk = builder.cacheOnDisk;
            imageScaleType = builder.imageScaleType;
            decodingOptions = builder.decodingOptions;
            delayBeforeLoading = builder.delayBeforeLoading;
            considerExifParams = builder.considerExifParams;
            extraForDownloader = builder.extraForDownloader;
            preProcessor = builder.preProcessor;
            postProcessor = builder.postProcessor;
            displayer = builder.displayer;
            handler = builder.handler;
            isSyncLoading = builder.isSyncLoading;
        }
    
        public boolean shouldShowImageOnLoading() {
            return imageOnLoading != null || imageResOnLoading != 0;
        }
    
        public boolean shouldShowImageForEmptyUri() {
            return imageForEmptyUri != null || imageResForEmptyUri != 0;
        }
    
        public boolean shouldShowImageOnFail() {
            return imageOnFail != null || imageResOnFail != 0;
        }
    
        public boolean shouldPreProcess() {
            return preProcessor != null;
        }
    
        public boolean shouldPostProcess() {
            return postProcessor != null;
        }
    
        public boolean shouldDelayBeforeLoading() {
            return delayBeforeLoading > 0;
        }
    
        public Drawable getImageOnLoading(Resources res) {
            return imageResOnLoading != 0 ? res.getDrawable(imageResOnLoading) : imageOnLoading;
        }
    
        public Drawable getImageForEmptyUri(Resources res) {
            return imageResForEmptyUri != 0 ? res.getDrawable(imageResForEmptyUri) : imageForEmptyUri;
        }
    
        public Drawable getImageOnFail(Resources res) {
            return imageResOnFail != 0 ? res.getDrawable(imageResOnFail) : imageOnFail;
        }
    
        public boolean isResetViewBeforeLoading() {
            return resetViewBeforeLoading;
        }
    
        public boolean isCacheInMemory() {
            return cacheInMemory;
        }
    
        public boolean isCacheOnDisk() {
            return cacheOnDisk;
        }
    
        public ImageScaleType getImageScaleType() {
            return imageScaleType;
        }
    
        public Options getDecodingOptions() {
            return decodingOptions;
        }
    
        public int getDelayBeforeLoading() {
            return delayBeforeLoading;
        }
    
        public boolean isConsiderExifParams() {
            return considerExifParams;
        }
    
        public Object getExtraForDownloader() {
            return extraForDownloader;
        }
    
        public BitmapProcessor getPreProcessor() {
            return preProcessor;
        }
    
        public BitmapProcessor getPostProcessor() {
            return postProcessor;
        }
    
        public BitmapDisplayer getDisplayer() {
            return displayer;
        }
    
        public Handler getHandler() {
            return handler;
        }
    
        boolean isSyncLoading() {
            return isSyncLoading;
        }
    
        /**
         * Builder for {@link DisplayImageOptions}
         */
        public static class Builder {
            private int imageResOnLoading = 0;
            private int imageResForEmptyUri = 0;
            private int imageResOnFail = 0;
            private Drawable imageOnLoading = null;
            private Drawable imageForEmptyUri = null;
            private Drawable imageOnFail = null;
            private boolean resetViewBeforeLoading = false;
            private boolean cacheInMemory = false;
            private boolean cacheOnDisk = false;
            private ImageScaleType imageScaleType = ImageScaleType.IN_SAMPLE_POWER_OF_2;
            private Options decodingOptions = new Options();
            private int delayBeforeLoading = 0;
            private boolean considerExifParams = false;
            private Object extraForDownloader = null;
            private BitmapProcessor preProcessor = null;
            private BitmapProcessor postProcessor = null;
            private BitmapDisplayer displayer = DefaultConfigurationFactory.createBitmapDisplayer();
            private Handler handler = null;
            private boolean isSyncLoading = false;
    
            @Deprecated
            public Builder showStubImage(int imageRes) {
                imageResOnLoading = imageRes;
                return this;
            }
    
            public Builder showImageOnLoading(int imageRes) {
                imageResOnLoading = imageRes;
                return this;
            }
    
            public Builder showImageOnLoading(Drawable drawable) {
                imageOnLoading = drawable;
                return this;
            }
    
            public Builder showImageForEmptyUri(int imageRes) {
                imageResForEmptyUri = imageRes;
                return this;
            }
            
            public Builder showImageForEmptyUri(Drawable drawable) {
                imageForEmptyUri = drawable;
                return this;
            }
    
            public Builder showImageOnFail(int imageRes) {
                imageResOnFail = imageRes;
                return this;
            }
    
            public Builder showImageOnFail(Drawable drawable) {
                imageOnFail = drawable;
                return this;
            }
    
            public Builder resetViewBeforeLoading() {
                resetViewBeforeLoading = true;
                return this;
            }
    
            public Builder resetViewBeforeLoading(boolean resetViewBeforeLoading) {
                this.resetViewBeforeLoading = resetViewBeforeLoading;
                return this;
            }
    
            @Deprecated
            public Builder cacheInMemory() {
                cacheInMemory = true;
                return this;
            }
    
            public Builder cacheInMemory(boolean cacheInMemory) {
                this.cacheInMemory = cacheInMemory;
                return this;
            }
    
            @Deprecated
            public Builder cacheOnDisc() {
                return cacheOnDisk(true);
            }
    
            @Deprecated
            public Builder cacheOnDisc(boolean cacheOnDisk) {
                return cacheOnDisk(cacheOnDisk);
            }
    
            /** Sets whether loaded image will be cached on disk */
            public Builder cacheOnDisk(boolean cacheOnDisk) {
                this.cacheOnDisk = cacheOnDisk;
                return this;
            }
    
            public Builder imageScaleType(ImageScaleType imageScaleType) {
                this.imageScaleType = imageScaleType;
                return this;
            }
    
            public Builder bitmapConfig(Bitmap.Config bitmapConfig) {
                if (bitmapConfig == null) throw new IllegalArgumentException("bitmapConfig can't be null");
                decodingOptions.inPreferredConfig = bitmapConfig;
                return this;
            }
    
            public Builder decodingOptions(Options decodingOptions) {
                if (decodingOptions == null) throw new IllegalArgumentException("decodingOptions can't be null");
                this.decodingOptions = decodingOptions;
                return this;
            }
    
            public Builder delayBeforeLoading(int delayInMillis) {
                this.delayBeforeLoading = delayInMillis;
                return this;
            }
    
    
            public Builder extraForDownloader(Object extra) {
                this.extraForDownloader = extra;
                return this;
            }
    
            public Builder considerExifParams(boolean considerExifParams) {
                this.considerExifParams = considerExifParams;
                return this;
            }
    
            public Builder preProcessor(BitmapProcessor preProcessor) {
                this.preProcessor = preProcessor;
                return this;
            }
    
            public Builder postProcessor(BitmapProcessor postProcessor) {
                this.postProcessor = postProcessor;
                return this;
            }
    
            public Builder displayer(BitmapDisplayer displayer) {
                if (displayer == null) throw new IllegalArgumentException("displayer can't be null");
                this.displayer = displayer;
                return this;
            }
    
            Builder syncLoading(boolean isSyncLoading) {
                this.isSyncLoading = isSyncLoading;
                return this;
            }
    
            public Builder handler(Handler handler) {
                this.handler = handler;
                return this;
            }
    
            /** Sets all options equal to incoming options */
            public Builder cloneFrom(DisplayImageOptions options) {
                imageResOnLoading = options.imageResOnLoading;
                imageResForEmptyUri = options.imageResForEmptyUri;
                imageResOnFail = options.imageResOnFail;
                imageOnLoading = options.imageOnLoading;
                imageForEmptyUri = options.imageForEmptyUri;
                imageOnFail = options.imageOnFail;
                resetViewBeforeLoading = options.resetViewBeforeLoading;
                cacheInMemory = options.cacheInMemory;
                cacheOnDisk = options.cacheOnDisk;
                imageScaleType = options.imageScaleType;
                decodingOptions = options.decodingOptions;
                delayBeforeLoading = options.delayBeforeLoading;
                considerExifParams = options.considerExifParams;
                extraForDownloader = options.extraForDownloader;
                preProcessor = options.preProcessor;
                postProcessor = options.postProcessor;
                displayer = options.displayer;
                handler = options.handler;
                isSyncLoading = options.isSyncLoading;
                return this;
            }
    
            /** Builds configured {@link DisplayImageOptions} object */
            public DisplayImageOptions build() {
                return new DisplayImageOptions(this);
            }
        }
    
        public static DisplayImageOptions createSimple() {
            return new Builder().build();
        }
    }
  • 相关阅读:
    XToDo未完成内容标记管理器
    FuzzyAutocomplete代码模糊匹配智能提示
    KSImageNamed项目图片智能提示
    Backlight当前行背景高亮显示
    VVDocumenter规范注释生成器
    window.frames[]在Firefox下无法兼容的解决方式
    加密算法(扩展知识:Base64编码)
    Single Pattern(单例模式)
    C语言的基本数据类型长度
    移位操作和二进制知识
  • 原文地址:https://www.cnblogs.com/ak23173969/p/4980709.html
Copyright © 2020-2023  润新知