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

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

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

    邀月

    從.net中走來的Java愛好者
    posts - 22, comments - 10, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    在上篇《Java是如何快速煮成C#的?》(一):相似的方法中,我們開啟了C#與Java中的話題之一:相似的方法。本節(jié)我們再舉例說明,到底有多相似。

    我們用一個簡單的工廠模式的例子說明,順便復(fù)習(xí)下設(shè)計模式,呵呵。

    首先邀月得補充一下:

    1、語言對比:Java的文件名必須與類名匹配。在Java中,文件名必須遵循類的名稱。在C#中,雖然通常如此,但不是必需的。在C#中,可以有兩個class在一個文件中,并且從C#2.0開始,可能有一個Class跨越多個文件。

    2、簡單工廠(Simple Factory)模式
    Simple Factory模式根據(jù)提供給它的數(shù)據(jù),返回幾個可能類中的一個類的實例。通常它返回的類都有一個公共的父類和公共的方法。

    好了,我們看一個C#/Java的類圖

    邀月工作室

    邀月工作室

    就類圖本身而言,除了String與string的大小寫之外,并無區(qū)別。兩個圖均用Powerdesigner所畫,只是依據(jù)模板分別為c#2.0和Java。

    基類:Namer

    派生類:FirstFirst和LastFirst均繼承Namer

    NameFactory實現(xiàn)了Namer的Create方法,在本例中為getName()。

    代碼對比如下:
    Namer(C#):

    using System;
    namespace NameFactory
    {
        
    /// <summary>
        
    /// Summary description for Namer.
        
    /// </summary>
        //Base class for getting split names
        public class Namer
        {
            
    //parts stored here
            protected string frName, lName;

            
    //return first name
            public string getFrname()
            {
                
    return frName;
            }
            
    //return last name
            public string getLname()
            {
                
    return lName;
            }
        }
    }
    Namer(Java):
    package com.factory.SimpleFactory;
    public class Namer {
         
    protected String frName, lName;

         
    //return first name
         public String getFrname()
         {
             
    return frName;
         }
         
    //return last name
         public String getLname()
         {
             
    return lName;
         }
    }
    FirstFirst(C#):
    using System;
    namespace NameFactory
    {
        
    /// <summary>
        
    /// Summary description for FirstFirst.
        
    /// </summary>
        public class FirstFirst : Namer
        {
            
    public FirstFirst(string name)
            {
                
    int i = name.IndexOf(" ");
                
    if (i > 0)
                {
                    frName 
    = name.Substring(0, i).Trim();
                    lName 
    = name.Substring(i + 1).Trim();
                }
                
    else
                {
                    lName 
    = name;
                    frName 
    = "";
                }
            }
        }
    }
    FirstFirst(Java):
    package com.factory.SimpleFactory;
    public class FirstFirst extends Namer {
        
    public FirstFirst(String name) {
            
    int i = name.indexOf(" ");
            
    if (i > 0) {
                frName 
    = name.substring(0, i).trim();
                lName 
    = name.substring(i + 1).trim();
            } 
    else {
                lName 
    = name;
                frName 
    = "";
            }
        }
    }
    LastFirst(C#):
    using System;
    namespace NameFactory
    {
        
    /// <summary>
        
    /// Summary description for LastFirst.
        
    /// </summary>
        public class LastFirst : Namer
        {
            
    public LastFirst(string name)
            {
                
    int i = name.IndexOf(",");
                
    if (i > 0)
                {
                    lName 
    = name.Substring(0, i);
                    frName 
    = name.Substring(i + 1).Trim();
                }
                
    else
                {
                    lName 
    = name;
                    frName 
    = "";
                }
            }
        }
    }
    LastFirst(Java):
    package com.factory.SimpleFactory;
    public class LastFirst extends Namer {
        
    public LastFirst(String name) {
            
    int i = name.indexOf(",");
            
    if (i > 0) {
                lName 
    = name.substring(0, i);
                frName 
    = name.substring(i + 1).trim();
            } 
    else {
                lName 
    = name;
                frName 
    = "";
            }
        }
    }
    NameFactory(C#):
    using System;
    namespace NameFactory
    {
        
    /// <summary>
        
    /// Summary description for NameFactory.
        
    /// </summary>
        public class NameFactory
        {
            
    public NameFactory() { }

            
    public Namer getName(string name)
            {
                
    int i = name.IndexOf(",");
                
    if (i > 0)
                    
    return new LastFirst(name);
                
    else
                    
    return new FirstFirst(name);
            }
        }
    }
    NameFactory(Java):
    package com.factory.SimpleFactory;

    public class NameFactory {
        
    public NameFactory() {
        }

        
    public Namer getName(String name) {
            
    int i = name.indexOf(",");
            
    if (i > 0)
                
    return new LastFirst(name);
            
    else
                
    return new FirstFirst(name);
        }
    }
    測試方法:(C#):
    using System;
    using System.Text;
    namespace NameFactory
    {
        
    class Program
        {
            
    static string s;
            
    private static NameFactory nameFact;

            
    static void Main(string[] args)
            {
                System.Console.WriteLine(
    "please enter a string:");
                s 
    = Console.ReadLine();
                
    //s="zhang,tony";
                ShowFactoryName(s);
                Console.ReadKey();
            }
            
    static void ShowFactoryName(String input)
            {
                System.Console.WriteLine(
    "input:" + input);
                nameFact 
    = new NameFactory();
                Namer nm 
    = nameFact.getName(input);//此處可以用反射,類似于getClass方法
                System.Console.WriteLine("FirstName:" + nm.getFrname());
                System.Console.WriteLine(
    "LastName:" + nm.getLname());
            }
        }
    }
    (Java):
    package com.factory.SimpleFactory;

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;

    public class SimpleFactoryDemo1 {
        
    private static NameFactory nameFact;
        
    static String s;

        
    public static void main(String[] args) {
            System.out.println(
    "please enter a string:");
            
    try {
                BufferedReader in 
    = new BufferedReader(new InputStreamReader(
                        System.in));
                s 
    = in.readLine();
            } 
    catch (IOException e) {
            }
            
    // s="zhang,tony";
            ShowFactoryName(s);
        }

        
    static void ShowFactoryName(String input) {
            System.out.println(
    "input:" + input);
            nameFact 
    = new NameFactory();
            Namer nm 
    = nameFact.getName(input);// 此處可以用反射,類似于getClass方法
            System.out.println("FirstName:" + nm.getFrname());
            System.out.println(
    "LastName:" + nm.getLname());
        }
    }

    正常情況下,分別得出如下結(jié)果:
    邀月工作室
    邀月工作室

    小結(jié):從代碼的比較中,大多數(shù)情況下,改下大小寫,代碼就可以通用,只是命名空間可能有較大差異。如果你熟悉c#所有的類,Java是否也感覺很容易呢?





    邀月注:本文版權(quán)由邀月和博客園(BlogJava)共同所有,轉(zhuǎn)載請注明出處。
    助人等于自助!   3w@live.cn
    主站蜘蛛池模板: 亚洲AV中文无码乱人伦| 四虎在线成人免费网站| 日韩精品视频免费网址| 国产成人精品日本亚洲18图| 最近免费中文字幕大全免费| 精品亚洲成a人片在线观看 | 黄瓜视频影院在线观看免费| 337p日本欧洲亚洲大胆色噜噜| 无码日韩精品一区二区免费暖暖 | 久久久久久亚洲av成人无码国产| 99久久99这里只有免费的精品| 亚洲精品国产精品乱码不卡√| 香蕉免费一级视频在线观看| 亚洲综合在线另类色区奇米| 国产免费一区二区三区不卡| 亚洲人成在线观看| 最近中文字幕2019高清免费| 亚洲H在线播放在线观看H| 在线观看免费污视频| 国产精品无码亚洲精品2021| 亚洲国产精品狼友中文久久久| 两性色午夜视频免费播放| 亚洲国产美女精品久久久久∴| 91av视频免费在线观看| 亚洲中文字幕在线无码一区二区| 韩国欧洲一级毛片免费| 一区二区免费在线观看| 亚洲欧洲在线观看| 搡女人免费视频大全| 青青草97国产精品免费观看| 亚洲阿v天堂在线| 免费看国产精品3a黄的视频| 免费无码午夜福利片69| 亚洲精品私拍国产福利在线| 成全影视免费观看大全二| 一本久久A久久免费精品不卡 | 久久亚洲精品视频| 国产成人免费爽爽爽视频| 一级日本高清视频免费观看| 911精品国产亚洲日本美国韩国| 美女黄网站人色视频免费国产|