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

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

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

    我的漫漫程序之旅

    專注于JavaWeb開發(fā)
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數(shù)據(jù)加載中……

    用泛型類簡化服務層類的設(shè)計

    領(lǐng)域?qū)宇惪梢岳斫鉃槌绦蜻\行時數(shù)據(jù)流的功能單位,而服務層類是為領(lǐng)域?qū)宇愄峁┓盏?常見的服務有增刪改查等操作,在沒有泛型之前,我們只能采用一個服務類為一個領(lǐng)域類提供服務的方案,如果說服務的性質(zhì)類似,如都是增刪改查等,則代碼的功能重復性很高,維護起來也很麻煩.如果采用了泛型類,我們就可以把性質(zhì)相似的服務類歸納成一個,很大程度上能簡化編碼.

    下面請看例子,我們有兩個領(lǐng)域?qū)ο箢?
    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實例轉(zhuǎn)化為XML中一個節(jié)點
         
    */

        
    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類的實例轉(zhuǎn)化為XML的一個節(jié)點
         
    */

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


    }

    它們都實現(xiàn)了一個名為CanbeXmlElementable的接口:
    package domain;

    import
     org.dom4j.Element;
    /**
     * 接口,強制子類實現(xiàn)generateElement函數(shù)
     * 
    @author zdw
     *
     
    */

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

    為什么要實現(xiàn)這個接口呢,下面就知道了.
    對這兩個對象需要實現(xiàn)集中管理和將集合存儲到XML文件中,現(xiàn)在我們可以用泛型類實現(xiàn)這兩個功能,下面看泛型類實現(xiàn)的新服務類:
    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();
            }

        }

    }


    對于兩個領(lǐng)域?qū)ο蟮募瞎芾砗蚗ML持久化,使用這一個類就可以了,下面是測試代碼:
    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"
    );
        }


    }

    文件結(jié)果:
    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>
    現(xiàn)在可以看出,以前使用多個類才能實現(xiàn)的功能在泛型類誕生后只需要一個類就可以了,它能高度歸納類的共性,減少功能相似類的數(shù)目,減少重復代碼,減輕了項目的復雜度,真的是"很好,很強大!".



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

    主站蜘蛛池模板: 91精品成人免费国产| 国产亚洲色视频在线| 日韩免费视频播播| 亚洲第一成人影院| 最近中文字幕免费mv视频7| 1000部拍拍拍18勿入免费视频下载 | 一本一道dvd在线观看免费视频| 国产在线精品一区免费香蕉| 亚洲视频在线免费观看| 成年女人毛片免费视频| 婷婷综合缴情亚洲狠狠尤物| 国产AV无码专区亚洲精品| 亚洲一区二区三区国产精品无码| 在线看亚洲十八禁网站| 97在线免费视频| 免费精品国产日韩热久久| 免费在线观看日韩| 亚洲av综合av一区| 久久久久亚洲AV成人无码| 亚洲av片不卡无码久久| 成人国产网站v片免费观看| 免费人成在线观看网站| 成人免费在线观看网站| 在线亚洲97se亚洲综合在线| 亚洲最大黄色网站| 特色特黄a毛片高清免费观看 | 337P日本欧洲亚洲大胆精品| 最新亚洲精品国偷自产在线| 三年片在线观看免费观看大全中国| 久久国产乱子伦精品免费不卡| 性xxxx视频播放免费| 国产∨亚洲V天堂无码久久久| 亚洲五月综合网色九月色| 国产福利免费视频| 毛色毛片免费观看| 国产亚洲美女精品久久久久狼| 亚洲精品天堂在线观看| 成人无码WWW免费视频| 日韩伦理片电影在线免费观看| 亚洲Av无码专区国产乱码DVD| 99亚洲男女激情在线观看|