设计模式之建造者(构造器)模式

构造器模式也可以称之为建造者模式,构造器模式其实在android中使用的比较多,当然在写一些框架或封装一些模块的时候也经常会用到构造器模式。

那么构造器模式适用的场景总结:适用于给定一个基础模板,可以配置多个参数,从而得到不同的结果。也就是说能够在此基础模板的基础上配置自己想要显示的模板样式。

看代码示例:

/**
 * builder模式
 */
public class User {

   private final String mFirstName; // 必选
   private final String mLastName; // 必选
   private final String mSex; // 可选
   private final int mAge; // 可选
   private final String mPhone; // 可选

   private User(Builder userBuilder) {
      this.mFirstName = userBuilder.mFirstName;
      this.mLastName = userBuilder.mLastName;
      this.mSex = userBuilder.mSex;
      this.mAge = userBuilder.mAge;
      this.mPhone = userBuilder.mPhone;
   }

   public String getmFirstName() {
      return mFirstName;
   }

   public String getmLastName() {
      return mLastName;
   }

   public String getmSex() {
      return mSex;
   }

   public int getmAge() {
      return mAge;
   }

   public String getmPhone() {
      return mPhone;
   }

   public static class Builder {
      private final String mFirstName; // 必选
      private final String mLastName; // 必选
      private String mSex; // 可选
      private int mAge; // 可选
      private String mPhone; // 可选

      public Builder(String mFirstName, String mLastName) {
         this.mFirstName = mFirstName;
         this.mLastName = mLastName;
      }

      public Builder sex(String sex) {
         this.mSex = sex;
         return this;
      }

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

      public Builder phone(String phone) {
         this.mPhone = phone;
         return this;
      }

      public User build() {
         return new User(this);
      }

   }

}
public class Main {

   /*
    * builder建造者模式(变种的builder模式)
    */
   public static void main(String[] args) {

      User user = new User.Builder("明天", "后天")
            .age(22).sex("无")
            .phone("123456789")
            .build();

      System.out.println(user.getmAge());
   }

}
由于时间关系.......


猜你喜欢

转载自blog.csdn.net/qq_33429583/article/details/80917120