設(shè)計(jì)模式之建造者模式學(xué)習(xí)筆記

我的博客地址

建造者模式

主要參考了 /冰鑒/ 的一篇博客滋早,覺得寫的很詳細(xì)恳守,然后自己敲了一遍考婴。學(xué)習(xí)了 設(shè)計(jì)模式之建造者模式, 并做了一些筆記催烘。

建造者模式簡(jiǎn)介

建造者模式(Buidler Pattern)又叫生成器模式沥阱, 將一個(gè)復(fù)雜對(duì)象的構(gòu)建和它的表示分離開,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。

建造者模式有點(diǎn)

  1. 封裝性:不必知道實(shí)現(xiàn)的細(xì)節(jié)伊群,直接得到產(chǎn)品
  2. 擴(kuò)展性:Builder類相互獨(dú)立考杉,方便以后擴(kuò)展
  3. 安全性:每個(gè)產(chǎn)品相互獨(dú)立策精,建造的過(guò)程不會(huì)對(duì)其他產(chǎn)生影響

建造模式步驟以及實(shí)現(xiàn)

  1. 創(chuàng)建產(chǎn)品類,是所有產(chǎn)品的父類崇棠⊙释啵可以產(chǎn)生一個(gè)或多個(gè)產(chǎn)品,但是實(shí)現(xiàn)的接口可以完全不相關(guān)枕稀。

        public class Person {
         private String name;    //姓名
         private int age;        //年齡
         private String work;    //工作
    
         public String getWork () {
             return work;
         }
    
         public void setWork (String work) {
             this.work = work;
         }
    
         public String getName () {
             return name;
         }
    
         public void setName (String name) {
             this.name = name;
         }
    
         public int getAge () {
             return age;
         }
    
         public void setAge (int age) {
             this.age = age;
         }
     }
    
  2. 由父類生成兩個(gè)子產(chǎn)品

    Student:

     public class Student extends Person {
         private String sex = "man";     //性別
         
         public Student () {
             this.setWork("student");
         }
     
         public String getSex () {
             return sex;
         }
     
         public void setSex (String sex) {
             this.sex = sex;
         }
     
         @Override
         public String toString () {
             return "職業(yè):\t" + this.getWork() +
                     "\n性別:\t" + this.getSex() +
                     "\n姓名:\t" + this.getName() +
                     "\n年齡:\t" + this.getAge();
         }
     }    
    

    Teather

     public class Teatcher extends Person {
         private String sex;     //性別
     
         public Teatcher () {
             this.setWork("teacher");
         }
     
         public String getSex () {
             return sex;
         }
     
         public void setSex (String sex) {
             this.sex = sex;
         }
     
         @Override
         public String toString () {
             return "職業(yè):\t" + this.getWork() +
                     "\n性別:\t" + this.getSex() +
                     "\n姓名:\t" + this.getName() +
                     "\n年齡:\t" + this.getAge();
         }
     }
    
  3. 創(chuàng)建接口询刹,其中聲明生產(chǎn)產(chǎn)品需要的方法

     public interface PersonBuilder {
         void buildName();   //制造姓名
         void buildAge();    //制造年齡
         void buildSex();    //制造性別
     
         Person getResult(); //返回產(chǎn)品
     }
    
  4. 創(chuàng)建具體的建造類,開始生產(chǎn)產(chǎn)品啦...

    制造學(xué)生

     public class StudentBuilder implements PersonBuilder {
         private Student stu = new Student();
         @Override
         public void buildName () {
             stu.setName("a");
         }
     
         @Override
         public void buildAge () {
             stu.setAge(12);
         }
     
         @Override
         public void buildSex () {
             stu.setSex("man");
         }
     
         @Override
         public Person getResult () {
             return stu;
         }
     }
    

    制造教師

     public class TeatcherBuilder implements PersonBuilder {
         private Teatcher teatcher = new Teatcher();
         @Override
         public void buildName () {
             teatcher.setName("b");
         }
     
         @Override
         public void buildAge () {
             teatcher.setAge(23);
         }
     
         @Override
         public void buildSex () {
             teatcher.setSex("woman");
         }
     
         @Override
         public Person getResult () {
             return teatcher;
         }
     }
    
  5. 創(chuàng)建導(dǎo)演類萎坷,將制造過(guò)程放進(jìn)去

     public class PersonDirector {
    
         private PersonBuilder builder;
         //制造學(xué)生
         public Student constructStudent(){
             builder = new StudentBuilder();
             builder.buildAge();
             builder.buildName();
             builder.buildSex();
             //產(chǎn)品生產(chǎn)完成凹联,將產(chǎn)品返回出去
             return (Student) builder.getResult();
         }
         //制造老師
         public Teatcher constructTeacher(){
             builder = new TeatcherBuilder();
             builder.buildAge();
             builder.buildName();
             builder.buildSex();
             return (Teatcher) builder.getResult();
         }
     }
    
  6. 最后進(jìn)行測(cè)試,看能不能創(chuàng)建成功

     PersonDirector director = new PersonDirector();
     //生產(chǎn)學(xué)生
     Student student = director.constructStudent();
     Log.i(TAG, student.toString());
    
     //生產(chǎn)老師
     Teatcher teatcher = director.constructTeacher();
     Log.i(TAG, teatcher.toString());
    

結(jié)果打印

        01-04 14:10:31.907 2565-2565/xiaweizi.com.net I/MainActivity--->: 職業(yè):    student
                                                                          性別:    man
                                                                          姓名:    a
                                                                          年齡:    12
        01-04 14:10:31.907 2565-2565/xiaweizi.com.net I/MainActivity--->: 職業(yè):    teacher
                                                                          性別:    woman
                                                                          姓名:    b
                                                                          年齡:    23

其實(shí)Dialog的鏈?zhǔn)绞褂每梢圆捎媒ㄔ煺吣J絹?lái)完成

public class MyDialog {
    //警告框標(biāo)題
    private String title;
    //警告框圖標(biāo)資源ID
    private int iconId;
    //上線文
    private Context context;

    public String getTitle () {
        return title;
    }

    public int getIconId () {
        return iconId;
    }

    public Context getContext () {
        return context;
    }

    public static class Builder{
        //給自己的dialog設(shè)置默認(rèn)內(nèi)容
        private String title = "title";
        private int iconId = 0;
        private Context context;

        public Builder (Context context) {
            this.context = context;
        }

        public Builder setTitle(String title){
            this.title = title;
            return this;
        }

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

        //應(yīng)用自己的配置
        private void applyConfig(MyDialog myDialog){
            myDialog.title = title;
            myDialog.iconId = iconId;
            myDialog.context = context;
        }

        public MyDialog show(){
            MyDialog myDialog = new MyDialog();
            applyConfig(myDialog);
            return myDialog;
        }

    }
}

#######使用就簡(jiǎn)單了
MyDialog myDialog =
new MyDialog.Builder(this).setTitle("標(biāo)題").setIconId(R.mipmap.ic_launcher).show();

最后還是很感謝 大神的文章哆档,本篇文章作為個(gè)人筆記蔽挠,有點(diǎn)局限,易于理解瓜浸,方便事后查看象泵。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市斟叼,隨后出現(xiàn)的幾起案子偶惠,更是在濱河造成了極大的恐慌,老刑警劉巖朗涩,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忽孽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡谢床,警方通過(guò)查閱死者的電腦和手機(jī)兄一,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)识腿,“玉大人出革,你說(shuō)我怎么就攤上這事《伤希” “怎么了骂束?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)成箫。 經(jīng)常有香客問(wèn)我展箱,道長(zhǎng),這世上最難降的妖魔是什么蹬昌? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任混驰,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘栖榨。我一直安慰自己昆汹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布婴栽。 她就那樣靜靜地躺著满粗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪居夹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天本冲,我揣著相機(jī)與錄音准脂,去河邊找鬼。 笑死檬洞,一個(gè)胖子當(dāng)著我的面吹牛狸膏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播添怔,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼湾戳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了广料?” 一聲冷哼從身側(cè)響起砾脑,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎艾杏,沒想到半個(gè)月后韧衣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡购桑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年畅铭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勃蜘。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡硕噩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缭贡,到底是詐尸還是另有隱情炉擅,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布阳惹,位于F島的核電站坑资,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏穆端。R本人自食惡果不足惜袱贮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧攒巍,春花似錦嗽仪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至兢孝,卻和暖如春窿凤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背跨蟹。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工雳殊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窗轩。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓夯秃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親痢艺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仓洼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)堤舒,斷路器色建,智...
    卡卡羅2017閱讀 134,707評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法舌缤,內(nèi)部類的語(yǔ)法镀岛,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法友驮,線程的語(yǔ)...
    子非魚_t_閱讀 31,664評(píng)論 18 399
  • #Android 基礎(chǔ)知識(shí)點(diǎn)總結(jié) ---------- ##1.adb - android debug bridg...
    Mythqian閱讀 3,299評(píng)論 2 11
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程卸留,因...
    小菜c閱讀 6,444評(píng)論 0 17
  • 回憶小姐今天聚餐走越,吃完飯就去唱歌,十一二點(diǎn)才回來(lái)耻瑟。很久沒有這么晚了旨指,突然感覺自己又回到了之前上學(xué)的時(shí)候的感覺。打...
    睡丟一只襪子閱讀 193評(píng)論 0 2