<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 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

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

    我們用一個簡單的工廠模式的例子說明,順便復習下設計模式,呵呵。

    首先邀月得補充一下:

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

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

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

    邀月工作室

    邀月工作室

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

    基類:Namer

    派生類:FirstFirst和LastFirst均繼承Namer

    NameFactory實現了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());
        }
    }

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

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





    邀月注:本文版權由邀月和博客園(BlogJava)共同所有,轉載請注明出處。
    助人等于自助!   3w@live.cn
    主站蜘蛛池模板: 久久水蜜桃亚洲AV无码精品 | 一级特级女人18毛片免费视频| 女人被男人桶得好爽免费视频| 亚洲成年人免费网站| 2019中文字幕免费电影在线播放| 亚洲AV成人片色在线观看| 亚洲免费在线播放| 精品亚洲AV无码一区二区| 最近中文字幕无吗免费高清| 亚洲中文无码永久免费| 国产一区二区三区在线观看免费 | 啊v在线免费观看| 日韩电影免费在线观看网址 | 亚洲成综合人影院在院播放| 国产精品视频免费一区二区| 亚洲精品国产综合久久久久紧| 国产成人无码a区在线观看视频免费 | 日韩一级免费视频| 性生大片视频免费观看一级| 亚洲αv久久久噜噜噜噜噜| 最近中文字幕大全免费视频 | 亚洲美女又黄又爽在线观看| 一级毛片免费观看不卡视频| 久久精品国产亚洲av麻豆图片| 免费看的成人yellow视频| 一级毛片成人免费看a| 亚洲av无码乱码国产精品| 黄瓜视频影院在线观看免费| 免费观看亚洲人成网站| 99久久国产亚洲综合精品| 国产一级高清视频免费看| A级毛片高清免费视频在线播放| 亚洲国产精品成人精品小说| 国产色婷婷精品免费视频| a毛片视频免费观看影院| 亚洲综合校园春色| 2048亚洲精品国产| 性盈盈影院免费视频观看在线一区| 国产精品免费久久| 亚洲中文字幕AV在天堂| 国产自偷亚洲精品页65页|