
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
	<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head><card id="MainCard" title="&#x6B22;&#x8FCE;&#x5149;&#x4E34;"><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a><br/>&nbsp;</p><p><b>&#x6807;&#x9898;&#x3A;</b> &#x5982;&#x6B64;&#x7406;&#x89E3;&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x7F16;&#x7A0B;&#x5B;&#x8F6C;&#x5D;</p><p><b>&#x4F5C;&#x8005;&#x3A;</b> &#x64;&#x6E;&#x61;&#x77;&#x6F;</p><p><b>&#x65E5;&#x671F;&#x3A;</b> &#x32;&#x30;&#x31;&#x33;&#x2D;&#x30;&#x34;&#x2D;&#x31;&#x36;&#x20;&#x31;&#x31;&#x3A;&#x34;&#x38;&#x20;&#x41;&#x4D;</p><p><b>&#x5206;&#x7C7B;&#x3A;</b> <a href="wap.asp?do=showLog&amp;cateID=12">&#x7F51;&#x7EDC;&#x6587;&#x6458;</a></p><p><b>&#x5185;&#x5BB9;&#x3A;</b> &#x4ECE; Rob Pike &#x7684; Google+ &#x4E0A;&#x7684;&#x4E00;&#x4E2A;&#x63A8;&#x770B;&#x5230;&#x4E86;&#x4E00;&#x7BC7;&#x53EB;&#x300A;Understanding Object o&#114;iented Programming&#x300B;&#x7684;&#x6587;&#x7AE0;&#xFF0C;&#x6211;&#x5148;&#x628A;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x7B80;&#x8FF0;&#x4E00;&#x4E0B;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x8BF4;&#x8BF4;&#x8001;&#x724C;&#x9ED1;&#x5BA2; Rob Pike &#x7684;&#x8BC4;&#x8BBA;&#x3002;<br/>&#x5148;&#x770B;&#x8FD9;&#x7BC7;&#x6559;&#x7A0B;&#x662F;&#x600E;&#x4E48;&#x6765;&#x8BB2;&#x8FF0; OOP &#x7684;&#x3002;&#x5B83;&#x5148;&#x7ED9;&#x4E86;&#x4E0B;&#x9762;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x9700;&#x8981;&#x8F93;&#x51FA;&#x4E00;&#x6BB5;&#x5173;&#x4E8E;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7684;&#x6587;&#x5B57;&#xFF1A;&#x5047;&#x8BBE; Unix &#x5F88;&#x4E0D;&#x9519;&#xFF0C;Windows &#x5F88;&#x5DEE;&#x3002;<br/>&#x8FD9;&#x4E2A;&#x628A;&#x4E0B;&#x9762;&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x63CF;&#x8FF0;&#x6210;&#x662F;Hacker Solution&#x3002;&#xFF08;&#x8FD9;&#x5E2E;&#x4EBA;&#x89C9;&#x5F97;&#x4E0B;&#x9762;&#x8FD9;&#x53EB;&#x9ED1;&#x5BA2;&#xFF1F;&#x6211;&#x4F30;&#x8BA1;&#x8FD9;&#x5E2E;&#x4EBA;&#x771F;&#x662F;&#x6CA1;&#x770B;&#x8FC7;C&#x8BED;&#x8A00;&#x7684;&#x4EE3;&#x7801;&#xFF09;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class PrintOS<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static void main (final String[] args)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String osName = System.getProperty (&#34;os.name&#34;) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (osName.equals (&#34;SunOS&#34;) || osName.equals (&#34;Linux&#34;))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println (&#34;This is a UNIX box and therefore good.&#34;) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (osName.equals (&#34;Windows NT&#34;) || osName.equals (&#34;Windows 95&#34;))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println (&#34;This is a Windows box and therefore bad.&#34;) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println (&#34;This is not a box.&#34;) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>&#x7136;&#x540E;&#x5F00;&#x59CB;&#x7528;&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x7684;&#x7F16;&#x7A0B;&#x65B9;&#x5F0F;&#x4E00;&#x6B65;&#x4E00;&#x6B65;&#x5730;&#x8FDB;&#x5316;&#x8FD9;&#x4E2A;&#x4EE3;&#x7801;&#x3002;<br/>&#x5148;&#x662F;&#x4EE5;&#x8FC7;&#x7A0B;&#x5316;&#x7684;&#x601D;&#x8DEF;&#x6765;&#x91CD;&#x6784;&#x4E4B;&#x3002;<br/>&#x8FC7;&#x7A0B;&#x5316;&#x7684;&#x65B9;&#x6848;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class PrintOS<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;private static String unixBox ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#34;This is a UNIX box and therefore good.&#34; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;private static String windowsBox ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#34;This is a Windows box and therefore bad.&#34; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;private static String defaultBox ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#34;This is not a box.&#34; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;private static String getTheString (final String osName)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (osName.equals (&#34;SunOS&#34;) || osName.equals (&#34;Linux&#34;))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return unixBox () ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (osName.equals (&#34;Windows NT&#34;) ||osName.equals (&#34;Windows 95&#34;))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return windowsBox () ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return defaultBox () ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static void main (final String[] args)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println (getTheString (System.getProperty (&#34;os.name&#34;))) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>&#x7136;&#x540E;&#x662F;&#x4E00;&#x4E2A;&#x5E7C;&#x7A1A;&#x7684;&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x7684;&#x601D;&#x8DEF;&#x3002;<br/>&#x5E7C;&#x7A1A;&#x7684;&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x7F16;&#x7A0B;<br/>PrintOS.java&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class PrintOS<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static void main (final String[] args)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println (OSDiscriminator.getBoxSpecifier () .getStatement ()) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>OSDiscriminator.java&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class OSDiscriminator // Factory Pattern {<br/>&nbsp;&nbsp;&nbsp;&nbsp;private static BoxSpecifier theBoxSpecifier = null ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static BoxSpecifier getBoxSpecifier ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (theBoxSpecifier == null)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String osName = System.getProperty (&#34;os.name&#34;) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (osName.equals (&#34;SunOS&#34;) || osName.equals (&#34;Linux&#34;))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theBoxSpecifier = new UNIXBox () ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (osName.equals (&#34;Windows NT&#34;) || osName.equals (&#34;Windows 95&#34;))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theBoxSpecifier = new WindowsBox () ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theBoxSpecifier = new DefaultBox () ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return theBoxSpecifier ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>BoxSpecifier.java&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public interface BoxSpecifier<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;String getStatement () ;<br/>}<br/>DefaultBox.java&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class DefaultBox implements BoxSpecifier<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getStatement ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#34;This is not a box.&#34; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>UNIXBox.java&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class UNIXBox implements BoxSpecifier<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getStatement ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#34;This is a UNIX box and therefore good.&#34; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>WindowsBox.java&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class WindowsBox implements BoxSpecifier<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getStatement ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#34;This is a Windows box and therefore bad.&#34; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>&#x4ED6;&#x4EEC;&#x89C9;&#x5F97;&#x4E0A;&#x9762;&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x6CA1;&#x6709;&#x6D88;&#x9664; if &#x8BED;&#x53E5;&#xFF0C;&#x4ED6;&#x4EEC;&#x8BF4;&#x8FD9;&#x53EB;&#x4EE3;&#x7801;&#x7684;&#x201C;logic bottleneck&#x201D;&#xFF08;&#x903B;&#x8F91;&#x74F6;&#x9888;&#xFF09;&#xFF0C;&#x56E0;&#x4E3A;&#x5982;&#x679C;&#x4F60;&#x8981;&#x589E;&#x52A0;&#x4E00;&#x4E2A;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7684;&#x5224;&#x65AD;&#x7684;&#x8BDD;&#xFF0C;&#x4F60;&#x4E0D;&#x4F46;&#x8981;&#x52A0;&#x4E2A;&#x7C7B;&#xFF0C;&#x8FD8;&#x8981;&#x6539;&#x90A3;&#x6BB5; if-else &#x7684;&#x8BED;&#x53E5;&#x3002;<br/>&#x6240;&#x4EE5;&#xFF0C;&#x4ED6;&#x4EEC;&#x6574;&#x51FA;&#x4E00;&#x4E2A;&#x53EB; Sophisticated &#x7684;&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x7684;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x3002;<br/>OO &#x5927;&#x5E08;&#x7684;&#x65B9;&#x6848;<br/>&#x6CE8;&#x610F;&#x5176;&#x4E2D;&#x7684; Design Pattern<br/>PrintOS.java&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class PrintOS<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static void main (final String[] args)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println (OSDiscriminator.getBoxSpecifier () .getStatement ()) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>OSDiscriminator.java&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class OSDiscriminator // Factory Pattern {<br/>&nbsp;&nbsp;&nbsp;&nbsp;private static java.util.HashMap storage = new java.util.HashMap () ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static BoxSpecifier getBoxSpecifier ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BoxSpecifier value = (BoxSpecifier) storage.get (System.getProperty (&#34;os.name&#34;)) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (value == null)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return DefaultBox.value ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return value ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static void register (final String key, final BoxSpecifier value)<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;storage.put (key, value) ; // Should guard against null keys, actually.&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;static<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WindowsBox.register () ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UNIXBox.register () ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MacBox.register () ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>BoxSpecifier.java&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public interface BoxSpecifier<br/>{<br/>&nbsp;&nbsp;&nbsp;&nbsp;String getStatement () ;<br/>}<br/>DefaultBox.java&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class DefaultBox implements BoxSpecifier // Singleton Pattern {<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static final DefaultBox value = new DefaultBox () ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private DefaultBox () { }<br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getStatement ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#34;This is not a box.&#34; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>UNIXBox.java&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class UNIXBox implements BoxSpecifier // Singleton Pattern {<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static final UNIXBox value = new UNIXBox () ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private UNIXBox () { }<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;&nbsp;String getStatement ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#34;This is a UNIX box and therefore good.&#34; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static final void register ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSDiscriminator.register (&#34;SunOS&#34;, value) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSDiscriminator.register (&#34;Linux&#34;, value) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>WindowsBox.java&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class WindowsBox implements BoxSpecifier // Singleton Pattern {<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static final WindowsBox value = new WindowsBox () ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private WindowsBox () { }<br/>&nbsp;&nbsp;&nbsp;&nbsp;public String getStatement ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#34;This is a Windows box and therefore bad.&#34; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static final void register ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSDiscriminator.register (&#34;Windows NT&#34;, value) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSDiscriminator.register (&#34;Windows 95&#34;, value) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>MacBox.java&#xFF1A;<br/>&#x590D;&#x5236;&#x5185;&#x5BB9;&#x5230;&#x526A;&#x8D34;&#x677F; &#x7A0B;&#x5E8F;&#x4EE3;&#x7801;public class MacBox implements BoxSpecifier // Singleton Pattern {<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static final MacBox value = new MacBox () ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;private MacBox () { }<br/>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;&nbsp;String getStatement ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#34;This is a Macintosh box and therefore far superior.&#34; ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>&nbsp;&nbsp;&nbsp;&nbsp;public static final void register ()<br/>&nbsp;&nbsp;&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSDiscriminator.register (&#34;Mac OS&#34;, value) ;<br/>&nbsp;&nbsp;&nbsp;&nbsp;}<br/>}<br/>&#x4F5C;&#x8005;&#x8FD8;&#x975E;&#x5E38;&#x7684;&#x610F;&#x5730;&#x8BF4;&#xFF0C;&#x4ED6;&#x52A0;&#x4E86;&#x4E00;&#x4E2A;&#x201C;Mac OS&#x201D;&#x7684;&#x4E1C;&#x897F;&#x3002;&#x8001;&#x5B9E;&#x8BF4;&#xFF0C;&#x5F53;&#x6211;&#x770B;&#x5230;&#x6700;&#x540E;&#x8FD9;&#x6BB5; OO &#x5927;&#x5E08;&#x641E;&#x51FA;&#x6765;&#x7684;&#x4EE3;&#x7801;&#xFF0C;&#x6211;&#x5FEB;&#x8981;&#x5410;&#x4E86;&#x3002;&#x6211;&#x77AC;&#x95F4;&#x60F3;&#x5230;&#x4E86;&#x4E24;&#x4EF6;&#x4E8B;&#xFF1A;&#x4E00;&#x4E2A;&#x662F;&#x4EE5;&#x524D;&#x7684;&#x300A;&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x662F;&#x4E2A;&#x9A97;&#x5C40;&#x300B;&#x548C; &#x300A;&#x5404;&#x79CD;&#x6D41;&#x884C;&#x7684;&#x7F16;&#x7A0B;&#x65B9;&#x5F0F;&#x300B;&#x4E2D;&#x8BF4;&#x7684;&#x201C;&#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#x9A71;&#x52A8;&#x7F16;&#x7A0B;&#x201D;&#xFF0C;&#x53E6;&#x4E00;&#x4E2A;&#x6211;&#x60F3;&#x5230;&#x4E86;&#x90A3;&#x4E9B;&#x88AB;&#x654F;&#x6377;&#x6D17;&#x8FC7;&#x8111;&#x7684;&#x7A0B;&#x5E8F;&#x5458;&#x548C;&#x54A8;&#x8BE2;&#x5E08;&#xFF0C;&#x4E5F;&#x662F;&#x8FD9;&#x79CD;&#x5FB7;&#x884C;&#x3002;<br/>&#x4E8E;&#x662F;&#x6211;&#x53BB;&#x770B;&#x4E86;&#x4E00;&#x4E0B;&#x7B2C;&#x4E00;&#x4F5C;&#x8005; Joseph Bergin &#x7684;&#x4E3B;&#x9875;&#xFF0C;&#x8FD9;&#x4E2A; Ph.D &#x662F;&#x679C;&#x7136;&#x521A;&#x521A;&#x5B8C;&#x6210;&#x4E86;&#x4E00;&#x672C;&#x5173;&#x4E8E;&#x654F;&#x6377;&#x548C;&#x6A21;&#x5F0F;&#x7684;&#x4E66;&#x3002;<br/>Rob Pike &#x7684;&#x8BC4;&#x8BBA;<br/>&#xFF08;Rob Pike &#x662F;&#x5F53;&#x5E74;&#x5728; Bell lab &#x91CC;&#x548C; Ken &#x4E00;&#x8D77;&#x641E; Unix &#x7684;&#x4E3B;&#x513F;&#xFF0C;&#x540E;&#x6765;&#x548C; Ken &#x5F00;&#x53D1;&#x4E86; UTF-8&#xFF0C;&#x73B0;&#x5728;&#x8FD8;&#x548C; Ken &#x4E00;&#x8D77;&#x641E; Go &#x8BED;&#x8A00;&#x3002;&#x6CE8;&#xFF1A;&#x4E0D;&#x8981;&#x4EE5;&#x4E3A; Ken &#x548C; Dennis &#x662F;&#x57FA;&#x53CB;&#xFF0C;&#x5176;&#x5B9E;&#x4ED6;&#x4EEC;&#x624D;&#x662F;&#x771F;&#x6B63;&#x7684;&#x8001;&#x57FA;&#x53CB;&#xFF01;&#xFF09;<br/>Rob Pike &#x5728;&#x4ED6;&#x7684; Google+ &#x7684;&#x8FD9;&#x8D34;&#x91CC;&#x8BC4;&#x8BBA;&#x5230;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x2014;&#x2014;<br/>&#x4ED6;&#x5E76;&#x4E0D;&#x786E;&#x8BA4;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x662F;&#x4E0D;&#x662F;&#x641E;&#x7B11;&#xFF1F;&#x4F46;&#x662F;&#x4ED6;&#x89C9;&#x5F97;&#x8FD9;&#x4E9B;&#x4E2A;&#x5199;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x662F;&#x5F88;&#x8BA4;&#x771F;&#x7684;&#x3002;&#x4ED6;&#x8BF4;&#x4ED6;&#x8981;&#x8BC4;&#x8BBA;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x662F;&#x56E0;&#x4E3A;&#x4ED6;&#x4EEC;&#x662F;&#x4E00;&#x540D; Hacker&#xFF0C;&#x81F3;&#x5C11;&#x8FD9;&#x4E2A;&#x8BCD;&#x51FA;&#x73B0;&#x5728;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x7684;&#x672F;&#x8BED;&#x4E2D;&#x3002;<br/>&#x4ED6;&#x8BF4;&#xFF0C;&#x8FD9;&#x4E2A;&#x7A0B;&#x5E8F;&#x6839;&#x672C;&#x5C31;&#x4E0D;&#x9700;&#x8981;&#x4EC0;&#x4E48; Object&#xFF0C;&#x53EA;&#x9700;&#x8981;&#x4E00;&#x5F20;&#x5C0F;&#x5C0F;&#x7684;&#x914D;&#x7F6E;&#x8868;&#x683C;&#xFF0C;&#x91CC;&#x9762;&#x914D;&#x7F6E;&#x4E86;&#x5BF9;&#x5E94;&#x7684;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x548C;&#x4F60;&#x60F3;&#x8F93;&#x51FA;&#x7684;&#x6587;&#x672C;&#x3002;&#x8FD9;&#x4E0D;&#x5C31;&#x5B8C;&#x4E86;&#x3002;&#x8FD9;&#x4E48;&#x7B80;&#x5355;&#x7684;&#x8BBE;&#x8BA1;&#xFF0C;&#x975E;&#x5E38;&#x5BB9;&#x6613;&#x5730;&#x6269;&#x5C55;&#xFF0C;&#x4ED6;&#x4EEC;&#x90A3;&#x4E2A;&#x6240;&#x8C13;&#x7684; Hack Solution &#x5B8C;&#x5168;&#x5C31;&#x662F;&#x7B28;&#x62D9;&#x7684;&#x4EE3;&#x7801;&#x3002;&#x540E;&#x9762;&#x90A3;&#x4E9B;&#x6240;&#x8C13;&#x7684;&#x4EE3;&#x7801;&#x8FDB;&#x5316;&#x76F8;&#x5F53;&#x75AF;&#x72C2;&#x548C;&#x611A;&#x8822;&#x7684;&#xFF0C;&#x8FD9;&#x4E2A;&#x5B8C;&#x5168;&#x8BEF;&#x5BFC;&#x4E86;&#x5BF9;&#x7F16;&#x7A0B;&#x7684;&#x8BA4;&#x77E5;&#x3002;<br/>&#x7136;&#x540E;&#xFF0C;&#x4ED6;&#x8FD8;&#x8BF4;&#xFF0C;&#x4ED6;&#x89C9;&#x5F97;&#x8FD9;&#x4E9B; OO &#x7684;&#x72C2;&#x70ED;&#x4EFD;&#x5B50;&#x975E;&#x5E38;&#x5BB3;&#x6015;&#x6570;&#x636E;&#xFF0C;&#x4ED6;&#x4EEC;&#x559C;&#x6B22;&#x7528;&#x591A;&#x5C42;&#x7684;&#x7C7B;&#x7684;&#x5173;&#x7CFB;&#x6765;&#x5B8C;&#x6210;&#x4E00;&#x4E2A;&#x672C;&#x6765;&#x53EA;&#x9700;&#x8981;&#x68C0;&#x7D22;&#x4E09;&#x884C;&#x6570;&#x636E;&#x8868;&#x7684;&#x5DE5;&#x4F5C;&#x3002;&#x4ED6;&#x8BF4;&#x4ED6;&#x66FE;&#x7ECF;&#x542C;&#x8BF4;&#x6709;&#x4EBA;&#x5728;&#x4ED6;&#x7684;&#x5DE5;&#x4F5C;&#x79CD;&#x7528;&#x5404;&#x79CD; OO &#x7684;&#x4E1C;&#x897F;&#x6765;&#x66FF;&#x6362; While &#x5FAA;&#x73AF;&#x3002;&#xFF08;&#x6211;&#x542C;&#x8BF4;&#x4E2D;&#x56FD; Thoughtworks &#x90A3;&#x5E2E;&#x641E;&#x654F;&#x6377;&#x7684;&#x4EBA;&#x7684;&#x786E;&#x559C;&#x6B22;&#x7528; Object &#x6765;&#x66FF;&#x6362;&#x6240;&#x6709;&#x7684; if-else &#x8BED;&#x53E5;&#xFF0C;&#x4ED6;&#x4EEC;&#x751A;&#x81F3;&#x8FD8;&#x559C;&#x6B22;&#x628A;&#x51FD;&#x6570;&#x7684;&#x884C;&#x6570;&#x9650;&#x5236;&#x5728; 10 &#x884C;&#x4EE5;&#x5185;&#xFF09;<br/>&#x4ED6;&#x8FD8;&#x7ED9;&#x4E86;&#x4E00;&#x4E2A;&#x94FE;&#x63A5; http://prog21.dadgum.com/156.html&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x8BFB;&#x4E00;&#x8BFB;&#x3002;&#x6700;&#x540E;&#x4ED6;&#x8BF4;&#xFF0C;OOP &#x7684;&#x672C;&#x8D28;&#x5C31;&#x662F;&#x2014;&#x2014;&#x5BF9;&#x6570;&#x636E;&#x548C;&#x4E0E;&#x4E4B;&#x5173;&#x8054;&#x7684;&#x884C;&#x4E3A;&#x8FDB;&#x884C;&#x7F16;&#x7A0B;&#x3002;&#x4FBF;&#x5C31;&#x7B97;&#x662F;&#x8FD9;&#x6837;&#x4E5F;&#x4E0D;&#x5B8C;&#x5168;&#x5BF9;&#xFF0C;&#x56E0;&#x4E3A;&#xFF1A;<br/> &#x5F15;&#x7528;&#x5185;&#x5BB9;Sometimes data is just data and functions are just functions.<br/>&#x6211;&#x7684;&#x7406;&#x89E3;<br/>&#x6211;&#x89C9;&#x5F97;&#xFF0C;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x7684;&#x4F8B;&#x5B50;&#x4E3E;&#x5F97;&#x592A;&#x5DEE;&#x4E86;&#xFF0C;&#x5DEE;&#x5F97;&#x611F;&#x89C9;&#x5C31;&#x50CF;&#x662F; OO &#x7684;&#x9AD8;&#x7EA7;&#x9ED1;&#x3002;&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x7F16;&#x7A0B;&#x6CE8;&#x91CD;&#x7684;&#x662F;&#xFF1A;1&#xFF09;&#x6570;&#x636E;&#x548C;&#x5176;&#x884C;&#x4E3A;&#x7684;&#x6253;&#x5305;&#x5C01;&#x88C5;&#xFF0C;2&#xFF09;&#x7A0B;&#x5E8F;&#x7684;&#x63A5;&#x53E3;&#x548C;&#x5B9E;&#x73B0;&#x7684;&#x89E3;&#x8026;&#x3002;&#x4F60;&#x90A3;&#x6015;&#xFF0C;&#x4E3E;&#x4E00;&#x4E2A;&#x591A;&#x4E2A;&#x5F00;&#x5173;&#x548C;&#x591A;&#x4E2A;&#x7535;&#x5668;&#x7684;&#x4F8B;&#x5B50;&#xFF0C;&#x4E0D;&#x7136;&#x5C31;&#x50CF; STL &#x4E2D;&#xFF0C;&#x4E00;&#x4E2A;&#x6392;&#x5E8F;&#x7B97;&#x6CD5;&#x5BF9;&#x591A;&#x4E2A;&#x4E0D;&#x540C;&#x5BB9;&#x5668;&#x7684;&#x4F8B;&#x5B50;&#xFF0C;&#x90FD;&#x6BD4;&#x8FD9;&#x4E2A;&#x4F8B;&#x5B50;&#x8981;&#x597D;&#x5F97;&#x591A;&#x5F97;&#x591A;&#x3002;&#x8001;&#x5B9E;&#x8BF4;&#xFF0C;Java SDK &#x91CC;&#x592A;&#x591A;&#x8FD9;&#x6837;&#x7684;&#x4E1C;&#x897F;&#x4E86;&#x3002;<br/>&#x6211;&#x4EE5;&#x524D;&#x7ED9;&#x4E00;&#x4E9B;&#x516C;&#x53F8;&#x8BB2;&#x4E00;&#x4E9B;&#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#x7684;&#x57F9;&#x8BAD;&#x8BFE;&#xFF0C;&#x6211;&#x4E00;&#x518D;&#x63D0;&#x5230;&#xFF0C;&#x90A3; 23 &#x4E2A;&#x7ECF;&#x5178;&#x7684;&#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#x548C; OO &#x534A;&#x6BDB;&#x94B1;&#x5173;&#x7CFB;&#x6CA1;&#x6709;&#xFF0C;&#x53EA;&#x4E0D;&#x8FC7;&#x4EBA;&#x5BB6;&#x7528; OO &#x6765;&#x5B9E;&#x73B0;&#x7F62;&#x4E86;&#x3002;&#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#x5C31;&#x4E09;&#x4E2A;&#x51C6;&#x5219;&#xFF1A;1&#xFF09;&#x4E2D;&#x610F;&#x4E8E;&#x7EC4;&#x5408;&#x800C;&#x4E0D;&#x662F;&#x7EE7;&#x627F;&#xFF0C;2&#xFF09;&#x4F9D;&#x8D56;&#x4E8E;&#x63A5;&#x53E3;&#x800C;&#x4E0D;&#x662F;&#x5B9E;&#x73B0;&#xFF0C;3&#xFF09;&#x9AD8;&#x5185;&#x805A;&#xFF0C;&#x4F4E;&#x8026;&#x5408;&#x3002;&#x4F60;&#x770B;&#xFF0C;&#x8FD9;&#x5B8C;&#x5168;&#x5C31;&#x662F; Unix &#x7684;&#x8BBE;&#x8BA1;&#x51C6;&#x5219;&#x3002;<br/>&#x76F8;&#x5173;&#x94FE;&#x63A5;<br/>[1].Understanding Object o&#114;iented Programming&#xFF1A;http://www.csis.pace.edu/~bergin/patterns/ppoop.html<br/>[2].&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x662F;&#x4E2A;&#x9A97;&#x5C40;&#xFF1A;http://news.cnblogs.com/n/75905/<br/>[3].&#x5404;&#x79CD;&#x6D41;&#x884C;&#x7684;&#x7F16;&#x7A0B;&#x65B9;&#x5F0F;&#xFF1A;http://news.cnblogs.com/n/112177/</p><p> + <a href="#CommentCard">&#x67E5;&#x770B;&#x5F53;&#x524D;&#x65E5;&#x5FD7;&#x8BC4;&#x8BBA;</a> (0)</p><p>&nbsp;<br/><br/><a href="wap.asp?do=Login">&#x767B;&#x5F55;</a></p><p><br/>&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;</p><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a></p><p><a href="http://www.pjhome.net/wap.asp">PJBlog3&nbsp;v3.2.9.518</a>&nbsp;Inside.</p><p>Processed&nbsp;In&nbsp;0.078&nbsp;ms</p><do type="prev" label="&#x8FD4;&#x56DE;"><prev/></do></card><card id="postCommentCard"><p><b>&#x6807;&#x9898;&#x3A;</b> <a href="#MainCard">&#x5982;&#x6B64;&#x7406;&#x89E3;&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x7F16;&#x7A0B;&#x5B;&#x8F6C;&#x5D;</a></p><p><br/>你没有权限发表评论</p><p><br/>&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;</p><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a></p><p><a href="http://www.pjhome.net/wap.asp">PJBlog3&nbsp;v3.2.9.518</a>&nbsp;Inside.</p><p>Processed&nbsp;In&nbsp;0.078&nbsp;ms</p><do type="prev" label="&#x8FD4;&#x56DE;"><prev/></do></card><card id="CommentCard"><p>&#x6682;&#x65E0;&#x8BC4;&#x8BBA;</p><p><a href="#MainCard">&#x8FD4;&#x56DE;</a></p><p><br/>&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;&#x2500;</p><p><a href="wap.asp">&#x6728;&#x5B50;&#x5C4B;</a></p><p><a href="http://www.pjhome.net/wap.asp">PJBlog3&nbsp;v3.2.9.518</a>&nbsp;Inside.</p><p>Processed&nbsp;In&nbsp;0.078&nbsp;ms</p><do type="prev" label="&#x8FD4;&#x56DE;"><prev/></do></card>
</wml>
