<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 々上善若水々 閱讀(672) 評論(0)  編輯  收藏 所屬分類: JavaWeb

    主站蜘蛛池模板: 亚洲AV成人无码网天堂| 美丽姑娘免费观看在线观看中文版| 亚洲成a人片77777老司机| 波多野结衣中文一区二区免费| 免费福利网站在线观看| 91成人免费观看在线观看| 精品久久久久亚洲| 久久精品国产99国产精品亚洲| 亚洲国产成人久久综合一| 国产精品亚洲产品一区二区三区| 在线观看免费a∨网站| 日本三级2019在线观看免费| 最新国产乱人伦偷精品免费网站| 污污的视频在线免费观看| 亚洲国产精品日韩av不卡在线| 亚洲黄色在线电影| 亚洲AV乱码久久精品蜜桃| 国产综合精品久久亚洲| 亚洲福利在线播放| 免费在线观看中文字幕| 日韩一级免费视频| 大陆一级毛片免费视频观看| 美女裸身网站免费看免费网站| 在线免费观看亚洲| 亚洲国产精品免费视频| 国偷自产一区二区免费视频| 两性色午夜免费视频| xxxx日本在线播放免费不卡| 成年免费大片黄在线观看com| 国产成人精品亚洲一区| 国产亚洲综合视频| 国产区图片区小说区亚洲区| 色费女人18女人毛片免费视频| 色偷偷亚洲第一综合| 在线亚洲v日韩v| 黄色免费在线网址| jizz18免费视频| 成人A片产无码免费视频在线观看| 两性色午夜视频免费网| 久久久久久一品道精品免费看| 亚洲一区二区在线免费观看|