<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

    主站蜘蛛池模板: 亚洲av永久无码精品国产精品 | 久久被窝电影亚洲爽爽爽| 国产乱弄免费视频| 日韩精品无码人妻免费视频| 最新仑乱免费视频| 在线免费观看污网站| 日韩精品免费一区二区三区| 又粗又硬又黄又爽的免费视频| 免费国产成人高清在线观看麻豆 | 嫩草在线视频www免费观看 | 亚洲av色香蕉一区二区三区| 亚洲乱色伦图片区小说| 亚洲av成人一区二区三区在线播放| 亚洲乱妇老熟女爽到高潮的片| 欧美亚洲精品一区二区| 免费人成在线观看播放a| 一级做a爱过程免费视频高清| 中文字幕免费观看视频| 日本在线免费播放| 大学生一级毛片免费看| 日本免费一二区在线电影| 午夜亚洲国产成人不卡在线| 国产亚洲av人片在线观看| 亚洲国产精品国自产电影| 亚洲欧洲日本国产| 亚洲av午夜电影在线观看| 视频免费1区二区三区| 国产一级片免费看| 免费看美女裸露无档网站| 成人免费无码大片a毛片| 亚洲国产精品无码久久青草 | 亚洲国产V高清在线观看| 亚洲情综合五月天| 亚洲人成电影在线观看网| 国产成人综合亚洲一区| 免费无码又爽又刺激一高潮| 无码av免费毛片一区二区| 亚洲 国产 图片| 亚洲电影国产一区| 亚洲日本VA午夜在线电影| caoporn成人免费公开|