设计模式之建造者模式(Builder)

在文章之前,简单介绍下设计模式中的分类:
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
以上也就是常说的23种设计模式,设计模式还有六大原则:

单一职责原则, 里氏替换原则, 依赖倒置原则, 接口隔壁原则, 迪米特法则, 开闭原则

建造者模式属于创建型模式,在构建对象完成后返回生成的对象,并且将对象的构建与表示分离。
简单的看下图例:

  1. /** 
  2.  * Created by diy_os on 2016/11/3. 
  3.  */  
  4. public class Person {  
  5.     private int id;//身份证  
  6.     private int age; //年龄  
  7.     private String name; //姓名  
  8.     private String address; //住址  
  9.     private boolean Marry;  //是否结婚  
  10.     private String level;   //水平  
  11.   
  12.     private Person(Builder builder) { //私有化显示类构造器  
  13.         this.age = builder.age;  
  14.         this.id = builder.id;  
  15.         this.address = builder.address;  
  16.         this.level = builder.level;  
  17.         this.Marry = builder.Marry;  
  18.         this.name = builder.name;  
  19.     }  
  20.   
  21.     public int getAge() {  
  22.         return age;  
  23.     }  
  24.   
  25.     public int getId() {  
  26.         return id;  
  27.     }  
  28.   
  29.     public String getName() {  
  30.         return name;  
  31.     }  
  32.   
  33.     public String getAddress() {  
  34.         return address;  
  35.     }  
  36.   
  37.     public boolean getMarray() {  
  38.         return Marry;  
  39.     }  
  40.   
  41.     public String getLevel() {  
  42.         return level;  
  43.     }  
  44.   
  45.     public String toString() {  
  46.         return "id=" + id + "\n" +  
  47.                 "name=" + name + "\n"  
  48.                 + "age=" + age + "\n" +  
  49.                 "address=" + address + "\n" +  
  50.                 "level=" + level + "\n" +  
  51.                 "Marrry=" + Marry + "\n";  
  52.     }  
  53.   
  54.     public static class Builder {  
  55.         private int id;//身份证  
  56.         private int age; //年龄  
  57.         private String name; //姓名  
  58.         private String address; //住址  
  59.         private boolean Marry;  //是否结婚  
  60.         private String level;   //水平  
  61.   
  62.         public Builder() {  
  63.   
  64.         }  
  65.   
  66.         public Builder setId(int id) {  
  67.             this.id = id;  
  68.             return this;  
  69.         }  
  70.   
  71.         public Builder setAge(int age) {  
  72.             this.age = age;  
  73.             return this;  //返回当前对象  
  74.         }  
  75.   
  76.         public Builder setName(String name) {  
  77.             this.name = name;  
  78.             return this;  
  79.         }  
  80.   
  81.         public Builder setAddress(String address) {  
  82.             this.address = address;  
  83.             return this;  
  84.         }  
  85.   
  86.         public Builder setMarray(boolean marray) {  
  87.             this.Marry = marray;  
  88.             return this;  
  89.         }  
  90.   
  91.         public Builder setLevel(String level) {  
  92.             this.level = level;  
  93.             return this;  
  94.         }  
  95.   
  96.         public Person builder() {  
  97.             return new Person(this);    
  98.         }  
  99.     }  
  100. }  

测试类:
  1. /** 
  2.  * Created by diy_os on 2016/11/3. 
  3.  */  
  4. public class Main {  
  5.     private String p;  
  6.     private String q;  
  7.   
  8.     public Main setP(String p) {  
  9.         this.p = p;  
  10.         return this;  
  11.     }  
  12.   
  13.     public Main setQ(String q) {  
  14.         this.q = q;  
  15.         return this;  
  16.     }  
  17.   
  18.     public String toString() {  
  19.         return "p=" + p + "\n" + "q=" + q + "\n";  
  20.     }  
  21.   
  22.     public static void main(String[] args) {  
  23.         Person person1 = new Person.Builder().setAddress("chongqing").setAge(22).setId(1).setLevel("3").setMarray(false).setName("diy_os").builder();  
  24.         System.out.println(person1.getName());  
  25.         System.out.print(person1);  
  26.         Person person2 = new Person.Builder().setAddress("chongqing").setLevel("3").setMarray(false).setName("diy_os").builder();  
  27.         System.out.print(person2);  
  28.         Main main = new Main();  
  29.         System.out.println(main.setP("p").setQ("q").toString());  
  30.     }  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29876893/viewspace-2140449/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29876893/viewspace-2140449/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值