<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數據加載中……

    用泛型類簡化服務層類的設計

    領域層類可以理解為程序運行時數據流的功能單位,而服務層類是為領域層類提供服務的,常見的服務有增刪改查等操作,在沒有泛型之前,我們只能采用一個服務類為一個領域類提供服務的方案,如果說服務的性質類似,如都是增刪改查等,則代碼的功能重復性很高,維護起來也很麻煩.如果采用了泛型類,我們就可以把性質相似的服務類歸納成一個,很大程度上能簡化編碼.

    下面請看例子,我們有兩個領域對象類:
    Member類:
    package domain;

    import
     org.dom4j.Element;

    /**
     * 成員類
     * 
     * 
    @author zdw
     * 
     
    */

    public class Member implements CanbeXmlElementtable
    {
        
    private
     String name;
        
    private int
     age;

        
    public Member(String name, int
     age)
        
    {
            
    this.name =
     name;
            
    this.age =
     age;
        }


        
    /**
         * 將Member實例轉化為XML中一個節點
         
    */

        
    public Element generateElement(Element parent)
        
    {
            Element elm 
    = parent.addElement("member"
    );
            Element nameElm 
    = elm.addElement("name"
    );
            nameElm.setText(name);
            Element ageElm 
    = elm.addElement("age"
    );
            ageElm.setText(String.valueOf(age));
            
    return
     elm;
        }


        
    public String toString()
        
    {
            
    return "Name=" + name + " Age=" +
     age;
        }


        
    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;
        }


    }


    公司類:
    package domain;

    import
     org.dom4j.Element;

    /**
     * 公司類
     * 
    @author zdw
     *
     
    */

    public class Company implements CanbeXmlElementtable
    {
        
    //公司名

        private String name;
        
    //地址

        private String address;
        
        
    public
     Company(String name,String address)
        
    {
            
    this.name =
     name;
            
    this.address =
     address;
        }

        
    /*
         * 將Company類的實例轉化為XML的一個節點
         
    */

        
    public Element generateElement(Element parent)
        
    {
            Element elm 
    = parent.addElement("company"
    );
            Element nameElm 
    = elm.addElement("name"
    );
            nameElm.setText(name);
            Element ageElm 
    = elm.addElement("address"
    );
            ageElm.setText(address);
            
    return
     elm;
        }

        
        @Override
        
    public String toString()
        
    {
            
    return "Company Name=" + name + " Address=" +
     address;
        }


        
    public String getName()
        
    {
            
    return
     name;
        }


        
    public void setName(String name)
        
    {
            
    this.name =
     name;
        }


        
    public String getAddress()
        
    {
            
    return
     address;
        }


        
    public void setAddress(String address)
        
    {
            
    this.address =
     address;
        }


    }

    它們都實現了一個名為CanbeXmlElementable的接口:
    package domain;

    import
     org.dom4j.Element;
    /**
     * 接口,強制子類實現generateElement函數
     * 
    @author zdw
     *
     
    */

    public interface CanbeXmlElementtable
    {
        
    public
     Element generateElement(Element parent);
    }

    為什么要實現這個接口呢,下面就知道了.
    對這兩個對象需要實現集中管理和將集合存儲到XML文件中,現在我們可以用泛型類實現這兩個功能,下面看泛型類實現的新服務類:
    package domain;

    import
     java.io.FileWriter;
    import
     java.util.ArrayList;
    import
     java.util.List;

    import
     org.dom4j.Document;
    import
     org.dom4j.DocumentHelper;
    import
     org.dom4j.Element;
    import
     org.dom4j.io.OutputFormat;
    import
     org.dom4j.io.XMLWriter;
    /*
     * 服務類,持有對象的集合,負責對象的存儲
     
    */

    public class Service<extends CanbeXmlElementtable>
    {
        
    private List<T>
     elements;
        
    /*
         *添加集合元素
         
    */

        
    public void add(T element)
        
    {
            
    if(elements == null
    )
            
    {
                elements 
    = new ArrayList<T>
    ();
            }

            elements.add(element);
        }

        
    /*
         * 將集合保存成xml文件
         
    */

        
    public void saveToXml(String xmlFile)
        
    {
            
    try

            
    {
                Document document 
    =
     DocumentHelper.createDocument();
                Element root 
    = document.addElement("elements"
    );
                
    for
    (T t : elements)
                
    {
                    t.generateElement(root);    
                }

                
                OutputFormat format 
    = OutputFormat.createPrettyPrint();;
                
    //指定xml編碼

                format.setEncoding("GBK");
                XMLWriter writer 
    = new XMLWriter(new
     FileWriter(xmlFile),format);
                writer.write(document);
                writer.close();
            }
     catch (Exception e)
            
    {
                e.printStackTrace();
            }

        }

    }


    對于兩個領域對象的集合管理和XML持久化,使用這一個類就可以了,下面是測試代碼:
    package domain;

    public class
     Main
    {

        
    /**
         * 
    @param args
         
    */

        
    public static void main(String[] args)
        
    {
            Service
    <Member> memberService = new Service<Member>
    ();
            
    //泛型類測試一

            memberService.add(new Member("Andy",25));
            memberService.add(
    new Member("Bill",35
    ));
            memberService.add(
    new Member("Cindy",45
    ));
            memberService.add(
    new Member("Sitinspring",55
    ));
            memberService.saveToXml(
    "src/domain/member.xml"
    );
            
    //泛型類測試二

            Service<Company> companyService = new Service<Company>();
            
            companyService.add(
    new Company("IBM","New York"
    ));
            companyService.add(
    new Company("Microsoft","beijing York"
    ));
            companyService.add(
    new Company("Google","Shanghai"
    ));
            companyService.add(
    new Company("Citigroup","Dalian"
    ));
            companyService.saveToXml(
    "src/domain/company.xml"
    );
        }


    }

    文件結果:
    member.xml:
    <?xml version="1.0" encoding="GBK"?>

    <elements>
      
    <member>
        
    <name>Andy</name>
        
    <age>25</age>
      
    </member>
      
    <member>
        
    <name>Bill</name>
        
    <age>35</age>
      
    </member>
      
    <member>
        
    <name>Cindy</name>
        
    <age>45</age>
      
    </member>
      
    <member>
        
    <name>Sitinspring</name>
        
    <age>55</age>
      
    </member>
    </elements>
    company.xml:
    <?xml version="1.0" encoding="GBK"?>

    <elements>
      
    <company>
        
    <name>IBM</name>
        
    <address>New York</address>
      
    </company>
      
    <company>
        
    <name>Microsoft</name>
        
    <address>beijing York</address>
      
    </company>
      
    <company>
        
    <name>Google</name>
        
    <address>Shanghai</address>
      
    </company>
      
    <company>
        
    <name>Citigroup</name>
        
    <address>Dalian</address>
      
    </company>
    </elements>
    現在可以看出,以前使用多個類才能實現的功能在泛型類誕生后只需要一個類就可以了,它能高度歸納類的共性,減少功能相似類的數目,減少重復代碼,減輕了項目的復雜度,真的是"很好,很強大!".



    posted on 2008-01-02 10:27 々上善若水々 閱讀(678) 評論(0)  編輯  收藏 所屬分類: JavaWeb

    主站蜘蛛池模板: 皇色在线免费视频| 亚洲视频在线免费观看| 你懂的免费在线观看网站| 国产无遮挡裸体免费视频| 久久精品国产亚洲av影院| 国产亚洲视频在线观看网址| 免费视频成人片在线观看| 免费大香伊蕉在人线国产| 亚洲色精品vr一区二区三区| 亚洲中文字幕无码中文| 久草视频免费在线观看| 国产亚洲精品a在线无码| 国产裸体美女永久免费无遮挡| 美女扒开屁股让男人桶爽免费| 国产亚洲欧美日韩亚洲中文色| 亚洲日韩看片无码电影| 亚洲免费在线播放| 亚洲成在人线aⅴ免费毛片| 成全高清视频免费观看| 亚洲 日韩 色 图网站| 毛片高清视频在线看免费观看| 国产又长又粗又爽免费视频| 中文字幕免费在线看| 久久久久噜噜噜亚洲熟女综合| 亚洲第一区香蕉_国产a| 精选影视免费在线 | 亚洲精品123区在线观看| 国产亚洲一区二区手机在线观看| 久久久受www免费人成| 亚洲人和日本人jizz| av无码免费一区二区三区| 九九99热免费最新版| 国产精品亚洲色图| 亚洲精品第一综合99久久| 激情内射亚洲一区二区三区| 日本免费高清视频| 日韩毛片在线免费观看| 亚洲高清无码专区视频| 国产免费高清69式视频在线观看| 国产成A人亚洲精V品无码| 国产免费一区二区三区在线观看|