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

我的博客地址

建造者模式

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

建造者模式簡介

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

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

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

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

  1. 創(chuàng)建產(chǎn)品類,是所有產(chǎn)品的父類??梢援a(chǎn)生一個或多個產(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. 由父類生成兩個子產(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)演類,將制造過程放進(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)行測試,看能不能創(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絹硗瓿?/h4>
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;
        }

    }
}

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容