乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      [Jakarta Commons筆記](méi) Commons Collections - Transformer組

       moonboat 2008-11-12

      接下來(lái)看Transformer組。

       

      Transformer

      ChainedTransformer

      SwitchTransformer

      TransformerUtils

       

      我們有時(shí)候需要將某個(gè)對(duì)象轉(zhuǎn)換成另一個(gè)對(duì)象供另一組方法調(diào)用,而這兩類對(duì)象的類型有可能并不是出于同一個(gè)繼承體系的,或者說(shuō)出了很基本的Object之外沒(méi)有共同的父類,或者我們根本不關(guān)心他們是不是有其他繼承關(guān)系,甚至就是同一個(gè)類的實(shí)例只是對(duì)我們而言無(wú)所謂,我們?yōu)榱怂軌虮缓罄m(xù)的調(diào)用者有意義的識(shí)別和處理,在這樣的情形,我們就可以利用Transformer。除了基本的轉(zhuǎn)型Transformer之外,Commons Collections還提供了Transformer鏈和帶條件的Transformer,使得我們很方便的組裝出有意義的轉(zhuǎn)型邏輯。

       

      假定我們?cè)谔幚韱T工聘用時(shí),需要將原來(lái)的Applicant對(duì)象轉(zhuǎn)換為Employee對(duì)象,而Applicant類和Employee類無(wú)論繼承關(guān)系、字段內(nèi)容、具體業(yè)務(wù)職能等等都不是同一派系的,只是某些字段是相關(guān)的,且要求必要的轉(zhuǎn)換,那么這個(gè)時(shí)候我們使用Transformer就可以比較方便的實(shí)現(xiàn)這項(xiàng)功能,并且由于它的實(shí)現(xiàn)是靈活的、模塊化的,使得今后的維護(hù)也變得清晰和易于處理。代碼如下:

       

      /** Applicant.java */

       

      package sean.study.commons.collections;

       

      import org.apache.commons.lang.builder.ToStringBuilder;

      import org.apache.commons.lang.builder.ToStringStyle;

       

      public class Applicant {

         

          private String name;

          private int age;

          private String applyFor;

         

          public Applicant() {

          }

       

          public Applicant(String name, int age, String applyFor) {

              this.name = name;

              this.age = age;

              this.applyFor = applyFor;

          }

         

          public String toString() {

              return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)

                      .append("name", name)

                      .append("age", age)

                      .append("applyFor", applyFor)

                      .toString();

          }

       

          public int getAge() {

              return age;

          }

       

          public void setAge(int age) {

              this.age = age;

          }

       

          public String getApplyFor() {

              return applyFor;

          }

       

          public void setApplyFor(String applyFor) {

              this.applyFor = applyFor;

          }

       

          public String getName() {

              return name;

          }

       

          public void setName(String name) {

              this.name = name;

          }

       

      }

       

      /** Employee.java */

       

      package sean.study.commons.collections;

       

      import java.util.Date;

       

      import org.apache.commons.lang.builder.ToStringBuilder;

      import org.apache.commons.lang.builder.ToStringStyle;

      import org.apache.commons.lang.time.DateFormatUtils;

       

      public class Employee {

       

          private String name;

          private int age;

          private Date dateJoined;

          private String grade;

          private double salary;

         

          public Employee() {

          }

       

          public Employee(String name, int age, Date dateJoined, String grade, double salary) {

              this.name = name;

              this.age = age;

              this.dateJoined = dateJoined;

              this.grade = grade;

              this.salary = salary;

          }

         

          public String toString() {

              return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)

                      .append("name", name)

                      .append("age", age)

                      .append("dateJoined", DateFormatUtils.format(dateJoined, "yyyy-MM-dd"))

                      .append("grade", grade)

                      .append("salary", salary)

                      .toString();

          }

       

          public int getAge() {

              return age;

          }

       

          public void setAge(int age) {

              this.age = age;

          }

       

          public Date getDateJoined() {

              return dateJoined;

          }

       

          public void setDateJoined(Date dateJoined) {

              this.dateJoined = dateJoined;

          }

       

          public String getGrade() {

              return grade;

          }

       

          public void setGrade(String grade) {

              this.grade = grade;

          }

       

          public String getName() {

              return name;

          }

       

          public void setName(String name) {

              this.name = name;

          }

       

          public double getSalary() {

              return salary;

          }

       

          public void setSalary(double salary) {

              this.salary = salary;

          }

       

      }

       

      /** TransformerUsage.java */

       

      package sean.study.commons.collections;

       

      import java.util.Arrays;

      import java.util.Collection;

      import java.util.Date;

      import java.util.Iterator;

      import java.util.List;

       

      import org.apache.commons.collections.CollectionUtils;

      import org.apache.commons.collections.Predicate;

      import org.apache.commons.collections.Transformer;

      import org.apache.commons.collections.functors.SwitchTransformer;

      import org.apache.commons.lang.StringUtils;

       

      public class TransformerUsage {

       

          public static void main(String[] args) {

              demoTransformerUsage();

          }

         

          public static void demoTransformerUsage() {

       

              System.out.println(StringUtils.center(" demoTransformerUsage ", 40, "="));

       

              // data setup

              Applicant[] applicants = new Applicant[] {

                  new Applicant("Tony", 26, "Developer"),

                  new Applicant("Michelle", 24, "Tester"),

                  new Applicant("Jack", 28, "Project Manager")

              };

              List appList = Arrays.asList(applicants);

             

              // predicate setup

              Predicate isDeveloper = new Predicate() {

                  public boolean evaluate(Object obj) {

                      Applicant app = (Applicant) obj;

                      return "Developer".equalsIgnoreCase(app.getApplyFor());

                  }

              };

              Predicate isTester = new Predicate() {

                  public boolean evaluate(Object obj) {

                      Applicant app = (Applicant) obj;

                      return "Tester".equalsIgnoreCase(app.getApplyFor());

                  }

              };

              Predicate isPM = new Predicate() {

                  public boolean evaluate(Object obj) {

                      Applicant app = (Applicant) obj;

                      return "Project Manager".equalsIgnoreCase(app.getApplyFor());

                  }

              };

              Predicate[] checkApplyFor = new Predicate[] {

                  isDeveloper,

                  isTester,

                  isPM

              };

             

              // transformer setup

              Transformer developerTransformer = new Transformer() {

                  public Object transform(Object obj) {

                      Applicant app = (Applicant) obj;

                      return new Employee(

                          app.getName(), app.getAge(), new Date(), "E4", 2000

                      );

                  }

              };

              Transformer testerTransformer = new Transformer() {

                  public Object transform(Object obj) {

                      Applicant app = (Applicant) obj;

                      return new Employee(

                          app.getName(), app.getAge(), new Date(), "E4", 2000

                      );

                  }

              };

              Transformer pmTransformer = new Transformer() {

                  public Object transform(Object obj) {

                      Applicant app = (Applicant) obj;

                      return new Employee(

                          app.getName(), app.getAge(), new Date(), "E5", 3000

                      );

                  }

              };

              Transformer[] transformers = new Transformer[] {

                  developerTransformer,

                  testerTransformer,

                  pmTransformer

              };

             

              // transform

              Transformer employTransformer = new SwitchTransformer(

                  checkApplyFor, transformers, null

              );

              Collection employed = CollectionUtils.collect(appList, employTransformer);

             

              // output

              System.out.println("Applicants: ");

              Iterator iter1 = appList.iterator();

              while (iter1.hasNext()) {

                  System.out.println(iter1.next());

              }

              System.out.println("Employed: ");

              Iterator iter2 = employed.iterator();

              while (iter2.hasNext()) {

                  System.out.println(iter2.next());

              }

       

              System.out.println(StringUtils.repeat("=", 40));

          }

       

      }

       

      以下是運(yùn)行結(jié)果:

       

      ========= demoTransformerUsage =========

      Applicants:

      Applicant[name=Tony,age=26,applyFor=Developer]

      Applicant[name=Michelle,age=24,applyFor=Tester]

      Applicant[name=Jack,age=28,applyFor=Project Manager]

      Employed:

      Employee[name=Tony,age=26,dateJoined=2005-08-05,grade=E4,salary=2000.0]

      Employee[name=Michelle,age=24,dateJoined=2005-08-05,grade=E4,salary=2000.0]

      Employee[name=Jack,age=28,dateJoined=2005-08-05,grade=E5,salary=3000.0]

      ========================================

       

      我們首先定義一組Predicate,用于在SwitchTransformer中判斷采用那個(gè)具體的Transformer,這個(gè)具體的Transformer也是通過(guò)數(shù)組同時(shí)傳遞給SwitchTransformer的構(gòu)造方法的。不同的Predicate可以有不同的實(shí)現(xiàn),不同的Transformer也可以有不同的實(shí)現(xiàn),因?yàn)樗鼈冎g實(shí)際上完全是相互獨(dú)立的。這就使我們有效的分離了邏輯和具體業(yè)務(wù)。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多