獨身模式+構建者模式打造私有個性化“商城”

需求是這樣的
我需要打造一個商城,且商城是注冊過的讀一無二的,就像是萬達或者沃爾瑪。商城每天都提供食物和衣服,但是為了提供個性化的促銷服務,商城每天提供不同的廉價商品搭配。
比如:
day1:(提供)調料品
day2:(提供)床上用品+嬰兒用品+家具
day3:(提供)廚具+洗護用品

好了,需求就是這樣。不廢話,直接上代碼。



/**
 * Created by zhangxiang on 16-9-22.
 */
public class Mall{
    private  int food;
    private  int clothes;
    private  int seasoning;
    private  int bedding;
    private  int babyProducts;
    private  int furniture;
    private  int cook;
    private  int washProducts;

    private static Mall sInstance = null;

    public static synchronized Mall getInstance(Builder builder) {
        if (sInstance == null) {
            sInstance = new Mall(builder);
        }else {
            //這里注意else重新初始化了Mall的內容,但是保持了Mall為單例
            sInstance.setMall(builder);
        }
        return sInstance;
    }

    public static class Builder {
        private final int food;
        private final int clothes;

        private int seasoning = 0;
        private int bedding = 0;
        private int babyProducts = 0;
        private int furniture = 0;
        private int cook = 0;
        private int washProducts = 0;
        //初始化必備商品
        public Builder(int food,int clothes){
            this.food = food;
            this.clothes = clothes;
        }

        public Builder seasoning(int seasoning){
            this.seasoning = seasoning;
            return this;
        }

        public Builder bedding(int bedding){
            this.bedding = bedding;
            return this;
        }

        public Builder babyProducts(int babyProducts){
            this.babyProducts = babyProducts;
            return this;
        }

        public Builder furniture(int furniture){
            this.furniture = furniture;
            return this;
        }

        public Builder cook(int cook){
            this.cook = cook;
            return this;
        }

        public Builder washProducts(int washProducts){
            this.washProducts = washProducts;
            return this;
        }
        //返回唯一商城
        public Mall build(){
            return Mall.getInstance(this);
        }
    }

    private Mall(Builder builder){
        food = builder.food;
        clothes = builder.clothes;
        seasoning = builder.seasoning;
        bedding = builder.bedding;
        babyProducts = builder.babyProducts;
        furniture = builder.furniture;
        cook = builder.cook;
        washProducts = builder.washProducts;
    }

    private void setMall(Builder builder){
        food = builder.food;
        clothes = builder.clothes;
        seasoning = builder.seasoning;
        bedding = builder.bedding;
        babyProducts = builder.babyProducts;
        furniture = builder.furniture;
        cook = builder.cook;
        washProducts = builder.washProducts;
    }

    public void printProducts(int day)
    {
        System.out.print(this.toString()+"---------"+day+"-----------\\n");
        System.out.println("food num is:" +this.food+"\\n"+
                "clothes num is:"+this.clothes+"\\n"+
                "seasoning num is:"+this.seasoning+"\\n"+
                "bedding num is:"+this.bedding+"\\n"+
                "babyProducts num is:"+this.babyProducts+"\\n"+
                "furniture num is:"+this.furniture+"\\n"+
                "cook num is:"+this.cook+"\\n"+
                "washProducts num is:"+this.washProducts+"\\n");
    }

    public static void main(String[] args) {
        /** 第一天:(食物+衣物)+調料品 **/
        Mall dayOne = new Mall.Builder(240,80).seasoning(100).build();
        dayOne.printProducts(1);
        /** 第二天:(食物+衣物)+床上用品+嬰兒用品+家具 **/
        Mall dayTwo = new Mall.Builder(300,100).bedding(20).babyProducts(30).furniture(50).build();
        dayTwo.printProducts(2);
        /** 第三天:(食物+衣物)+廚具+洗護用品 **/
        Mall dayThree = new Builder(400,20).cook(300).washProducts(50).build();
        dayThree.printProducts(3);
    }
}


打印結果:
Mall@3ba76e19可以看出都是同一個實例

Mall@3ba76e19---------1-----------
food num is:240
clothes num is:80
seasoning num is:100
bedding num is:0
babyProducts num is:0
furniture num is:0
cook num is:0
washProducts num is:0

Mall@3ba76e19---------2-----------
food num is:300
clothes num is:100
seasoning num is:0
bedding num is:20
babyProducts num is:30
furniture num is:50
cook num is:0
washProducts num is:0

Mall@3ba76e19---------3-----------
food num is:400
clothes num is:20
seasoning num is:0
bedding num is:0
babyProducts num is:0
furniture num is:0
cook num is:300
washProducts num is:50

很好,雖然你不是王思聰,但是你和他爸一樣有一個個性化商城了。

先來個小目標!
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容