1. 程式人生 > >Java是如何快速煮成C 的 (一) 相似的方法 2

Java是如何快速煮成C 的 (一) 相似的方法 2

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

在上篇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#):

[c-sharp] view plain copy print ?
  1. using System;  
  2. namespace NameFactory  
  3. {  
  4.     /// <summary>  
  5.     /// Summary description for Namer.  
  6.     /// </summary>  
  7.     //Base class for getting split names  
  8.     public class Namer  
  9.     {  
  10.         //parts stored here  
  11.         protected string frName, lName;  
  12.         //return first name  
  13.         public string getFrname()  
  14.         {  
  15.             return frName;  
  16.         }  
  17.         //return last name  
  18.         public string getLname()  
  19.         {  
  20.             return lName;  
  21.         }  
  22.     }  
  23. }  
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):

[java] view plain copy print ?
  1. package com.factory.SimpleFactory;  
  2. public class Namer {  
  3.      protected String frName, lName;  
  4.      //return first name  
  5.      public String getFrname()  
  6.      {  
  7.          return frName;  
  8.      }  
  9.      //return last name  
  10.      public String getLname()  
  11.      {  
  12.          return lName;  
  13.      }  
  14. }  
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#):

[c-sharp] view plain copy print ?
  1. using System;  
  2. namespace NameFactory  
  3. {  
  4.     /// <summary>  
  5.     /// Summary description for FirstFirst.  
  6.     /// </summary>  
  7.     public class FirstFirst : Namer  
  8.     {  
  9.         public FirstFirst(string name)  
  10.         {  
  11.             int i = name.IndexOf(" ");  
  12.             if (i > 0)  
  13.             {  
  14.                 frName = name.Substring(0, i).Trim();  
  15.                 lName = name.Substring(i + 1).Trim();  
  16.             }  
  17.             else  
  18.             {  
  19.                 lName = name;  
  20.                 frName = "";  
  21.             }  
  22.         }  
  23.     }  
  24. }  
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):

[java] view plain copy print ?
  1. package com.factory.SimpleFactory;  
  2. public class FirstFirst extends Namer {  
  3.     public FirstFirst(String name) {  
  4.         int i = name.indexOf(" ");  
  5.         if (i > 0) {  
  6.             frName = name.substring(0, i).trim();  
  7.             lName = name.substring(i + 1).trim();  
  8.         } else {  
  9.             lName = name;  
  10.             frName = "";  
  11.         }  
  12.     }  
  13. }  
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#):

 

[c-sharp] view plain copy print ?
  1. using System;  
  2. namespace NameFactory  
  3. {  
  4.     /// <summary>  
  5.     /// Summary description for LastFirst.  
  6.     /// </summary>  
  7.     public class LastFirst : Namer  
  8.     {  
  9.         public LastFirst(string name)  
  10.         {  
  11.             int i = name.IndexOf(",");  
  12.             if (i > 0)  
  13.             {  
  14.                 lName = name.Substring(0, i);  
  15.                 frName = name.Substring(i + 1).Trim();  
  16.             }  
  17.             else  
  18.             {  
  19.                 lName = name;  
  20.                 frName = "";  
  21.             }  
  22.         }  
  23.     }  
  24. }  
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):

[java] view plain copy print ?
  1. package com.factory.SimpleFactory;  
  2. public class LastFirst extends Namer {  
  3.     public LastFirst(String name) {  
  4.         int i = name.indexOf(",");  
  5.         if (i > 0) {  
  6.             lName = name.substring(0, i);  
  7.             frName = name.substring(i + 1).trim();  
  8.         } else {  
  9.             lName = name;  
  10.             frName = "";  
  11.         }  
  12.     }  
  13. }  
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#):

[c-sharp] view plain copy print ?
  1. using System;  
  2. namespace NameFactory  
  3. {  
  4.     /// <summary>  
  5.     /// Summary description for NameFactory.  
  6.     /// </summary>  
  7.     public class NameFactory  
  8.     {  
  9.         public NameFactory() { }  
  10.         public Namer getName(string name)  
  11.         {  
  12.             int i = name.IndexOf(",");  
  13.             if (i > 0)  
  14.                 return new LastFirst(name);  
  15.             else  
  16.                 return new FirstFirst(name);  
  17.         }  
  18.     }  
  19. }  
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):

[java] view plain copy print ?
  1. package com.factory.SimpleFactory;  
  2. public class NameFactory {  
  3.     public NameFactory() {  
  4.     }  
  5.     public Namer getName(String name) {  
  6.         int i = name.indexOf(",");  
  7.         if (i > 0)  
  8.             return new LastFirst(name);  
  9.         else  
  10.             return new FirstFirst(name);  
  11.     }  
  12. }  
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#):

[c-sharp] view plain copy print ?
  1. using System;  
  2. using System.Text;  
  3. namespace NameFactory  
  4. {  
  5.     class Program  
  6.     {  
  7.         static string s;  
  8.         private static NameFactory nameFact;  
  9.         static void Main(string[] args)  
  10.         {  
  11.             System.Console.WriteLine("please enter a string:");  
  12.             s = Console.ReadLine();  
  13.             //s="zhang,tony";  
  14.             ShowFactoryName(s);  
  15.             Console.ReadKey();  
  16.         }  
  17.         static void ShowFactoryName(String input)  
  18.         {  
  19.             System.Console.WriteLine("input:" + input);  
  20.             nameFact = new NameFactory();  
  21.             Namer nm = nameFact.getName(input);//此處可以用反射,類似於getClass方法  
  22.             System.Console.WriteLine("FirstName:" + nm.getFrname());  
  23.             System.Console.WriteLine("LastName:" + nm.getLname());  
  24.         }  
  25.     }  
  26. }  
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):

[java] view plain copy print ?
  1. package com.factory.SimpleFactory;  
  2. import java.io.BufferedReader;  
  3. import java.io.IOException;  
  4. import java.io.InputStreamReader;  
  5. public class SimpleFactoryDemo1 {  
  6.     private static NameFactory nameFact;  
  7.     static String s;  
  8.     /** 
  9.      * @param args 
  10.      */  
  11.     /** 
  12.      * @param args 
  13.      */  
  14.     public static void main(String[] args) {  
  15.         System.out.println("please enter a string:");  
  16.         try {  
  17.             BufferedReader in = new BufferedReader(new InputStreamReader(  
  18.                     System.in));  
  19.             s = in.readLine();  
  20.         } catch (IOException e) {  
  21.         }  
  22.         // s="zhang,tony";  
  23.         ShowFactoryName(s);  
  24.     }  
  25.     static void ShowFactoryName(String input) {  
  26.         System.out.println("input:" + input);  
  27.         nameFact = new NameFactory();  
  28.         Namer nm = nameFact.getName(input);// 此處可以用反射,類似於getClass方法  
  29.         System.out.println("FirstName:" + nm.getFrname());  
  30.         System.out.println("LastName:" + nm.getLname());  
  31.     }  
  32. }  
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;    /**     * @param args     */    /**     * @param args     */    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是否也感覺很容易呢?

下一篇:《Java是如何快速煮成C#的?》(二):資料訪問(1)

 

邀月注:本文版權由邀月和CSDN共同所有,轉載請註明出處。
助人等於自助!   [email protected]



 

 

 

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述