建造者模式

 
建造者模式
  • 什麼時候使用對每一個對象:將一個複雜的構建過程與其具表示細節相分離,使得一樣的構建過程能夠建立不一樣的表示主要解決在軟件系統中,有時候面臨着"一個複雜對象"的建立工做,其一般由各個部分的子對象用必定的算法構成;因爲需求的變化,這個複雜對象的各個部分常常面臨着劇烈的變化,可是將它們組合在一塊兒的算法卻相對穩定。
  • 如何解決:對每一個Builder:將變(Builder)與不變(Director)分離開,經過參數傳遞Builder實例進Director建造者Builder:建立和提供實例導演Director:管理建造出來的實例的依賴關係流程:客戶端須要建立什麼對象實例就建立一個導演類和這個對象的建立者,將建立者傳給導演類,導演類會使用建立者來建立具體的產品。使用方法:一、使用多個Builder,即對Builder接口/抽象類進行不一樣的具體實現(見下面例子) 二、對一個Builder,在Director中對構建過程的每一個步驟傳入不一樣的參數實現特化 / 不一樣的構建調用順序(Android中的AlertDialog.Builder)
  • 優勢: 一、建造者獨立,易擴展。 二、便於控制細節風險。
  • 缺點: 一、多個Builder:產品必須有共同點,範圍有限制。 二、如內部變化複雜,會有不少的建造類。
  • 使用場景: 一、去肯德基,漢堡、可樂、薯條、炸雞翅等是不變的,而其組合是常常變化的,生成出所謂的"套餐"。 二、須要生成的對象內部屬性自己相互依賴。三、Android中的AlertDialog.Builder。四、JAVA 中的 StringBuilder。
  • 注意事項:與工廠模式的區別是:建造者模式更加關注與零件裝配的順序。
單個Builder
  1. classProduct  {
  2.        private  String partA;//定義部件,部件能夠是任意類型,包括值類型和引用類型
  3.        private  String partB;
  4.        private  String partC;
  5. }
 
  1. abstract classBuilder{
  2.      //建立產品對象
  3.        protected  Product product=newProduct();
  4.  
  5.        public  abstract void buildPartA();
  6.        public  abstract void buildPartB();
  7.        public  abstract void buildPartC();
  8.  
  9.      //返回產品對象
  10.        public  Product getResult(){
  11.               return  product;
  12.        }
  13. }
 
  1. classDirector{
  2.        private  Builder builder;
  3.  
  4.        public  Director(Builder builder){
  5.               this.builder=builder;
  6.        }
  7.  
  8.      //管理控制產品構建與組裝方法
  9.        publicProduct construct(){
  10.               builder.buildPartA();
  11.               builder.buildPartB();
  12.               builder.buildPartC();
  13.               return builder.getResult();
  14.        }
  15. }
 
  1. ……
  2. Builder  builder =newConcreteBuilder();//能夠經過配置文件來存儲具體建造者類ConcreteBuilder的類名,使得更換新的建造者時無須修改源代碼,系統擴展更爲方便
  3. Director director =new  Director(builder);
  4. Product product = director.construct();
  5. ……
多個Builder
 
Android中的AlertDialog.Builder
    android中大量的使用對話框組件,它的調用方法就是構建,拼接,表示。
    Builder經過setTitle(),setMessage(),setIcon()等方法設置AlertDialog的屬性AlertController.AlertParams。 而後客戶能夠從create()中得到帶 AlertController.AlertParams 屬性的 AlertDialog 對象show出去。
  1. protectedvoid dialog(){
  2.     AlertDialog.Builder builder =newBuilder(Main.this);
  3.     builder.setMessage("確認退出嗎?");
  4.     builder.setTitle("提示");
  5.     builder.setPositiveButton("確認",newOnClickListener(){
  6.          @Override
  7.          publicvoid onClick(DialogInterface dialog,int which){
  8.               dialog.dismiss();
  9.           Main.this.finish();
  10.      }
  11.     });
  12.     builder.setNegativeButton("取消",newOnClickListener(){
  13.          @Override
  14.          publicvoid onClick(DialogInterface dialog,int which){
  15.               dialog.dismiss();
  16.          }
  17.     });
  18.     builder.create().show();
  19. }
這裏調用函數 dialog() 至關於Director。
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息