??xml version="1.0" encoding="utf-8" standalone="yes"?>精品国产一区二区三区久久久樱花,91在线九色porny,国精品**一区二区三区在线蜜桃http://www.aygfsteel.com/silvermyth/category/55182.htmlzh-cnThu, 06 Apr 2017 00:54:34 GMTThu, 06 Apr 2017 00:54:34 GMT60闲话Java设计模式三:(x)命o(h)模式http://www.aygfsteel.com/silvermyth/articles/426470.htmlGavin LiGavin LiTue, 28 Jul 2015 13:22:00 GMThttp://www.aygfsteel.com/silvermyth/articles/426470.htmlhttp://www.aygfsteel.com/silvermyth/comments/426470.htmlhttp://www.aygfsteel.com/silvermyth/articles/426470.html#Feedback1http://www.aygfsteel.com/silvermyth/comments/commentRss/426470.htmlhttp://www.aygfsteel.com/silvermyth/services/trackbacks/426470.html 在适配器模式中我们提到QGarinC?jin)个x(chng)友,他每天都?x)收到如下命令?x)
1 public interface Command {
2     public void execute();
3 }
其中一部分是做饭,一部分是洗服QGarin必须亲自完成吗,不一定:(x)
 1 public class CookCommand implements GirlFriendCommand {
 2 
 3     private String mealName = null;
 4     
 5     public CookCommand(String mealName) {
 6         super();
 7         this.mealName = mealName;
 8     }
 9 
10     private MealSupplier mealSupplier = null;
11     
12     public void setMealSupplier(MealSupplier mealSupplier) {
13         this.mealSupplier = mealSupplier;
14     }
15 
16     @Override
17     public void execute() {
18         mealSupplier.cook(mealName);
19     }
20 
21 }
真正完成做饭的是一个抽象的MealSupplier.
1 public interface MealSupplier {
2     public void cook(String name);
3 }
它可能代表的是一个饭店:(x)
 1 public class Restaurant implements MealSupplier{
 2     
 3     public Restaurant() {
 4         super();
 5     }
 6 
 7     @Override
 8     public void cook(String name) {
 9         System.out.println("饭店烧好?/span>"+name);
10     }
11     
12 }
同样的,真正z衣服的是抽象的CanWash.
 1 public class WashCommand implements GirlFriendCommand {
 2 
 3     private CanWash wash = null;
 4     
 5     public void setWash(CanWash wash) {
 6         this.wash = wash;
 7     }
 8 
 9     @Override
10     public void execute() {
11         if(wash != null){
12             wash.washClothes();
13         }
14     }
15 
16 }
它代表的可能是洗机Q?br />
1 public interface CanWash {
2     public void washClothes();
3 }

1 public class WashingMachine implements CanWash {
2 
3     @Override
4     public void washClothes() {
5         System.out.println("z机洗好了(jin)服");
6     }
7 
8 }
Garin要做的就是坐{命令,如何执行完全不管Q?br />
 1 public class GirlFriendCommandTest {
 2 
 3     /**
 4      * @param args
 5      */
 6     public static void main(String[] args) {
 7         BoyFriend bf = new BoyFriend("Garin");
 8         
 9         bf.addCommand(new CookCommand("鱼香肉丝"));
10         bf.addCommand(new WashCommand());
11         bf.action();
12     }
13 
14 }
执行完命令后效果如下Q?br />Garin开始执行命?br />饭店烧好?jin)鱼香肉?br />z机洗好了(jin)衣服

Gavin Li 2015-07-28 21:22 发表评论
]]>
闲话Java设计模式二:(x)适配器模?/title><link>http://www.aygfsteel.com/silvermyth/articles/426451.html</link><dc:creator>Gavin Li</dc:creator><author>Gavin Li</author><pubDate>Mon, 27 Jul 2015 14:51:00 GMT</pubDate><guid>http://www.aygfsteel.com/silvermyth/articles/426451.html</guid><wfw:comment>http://www.aygfsteel.com/silvermyth/comments/426451.html</wfw:comment><comments>http://www.aygfsteel.com/silvermyth/articles/426451.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/silvermyth/comments/commentRss/426451.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/silvermyth/services/trackbacks/426451.html</trackback:ping><description><![CDATA[从应用的角度来看Q适配器模式在代码中应用的Z(x)q不多。但从生z角度看Q非常直观生动,Ҏ(gu)理解。去q美国的朋友都知道在M前需要准备一个电(sh)源的转换器,因ؓ(f)国的插座格式和中国的不同,需要在中间做一个{换,q是一个非常经典的适配器模式的例子。适配器模式就是把不适应的接口变成适应Q或者叫做期望)(j)的接口?br />我原来有一个同事,名字叫做GarinQ从就?x)洗服Q但是不?x)做饭;W一ơ找?jin)个x(chng)友,l果人家奛_要求基本条g是?x)洗做饭?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span> <span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">interface</span><span style="color: #000000; "> IIdealBoyFriend {<br /></span><span style="color: #008080; ">2</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> doCooking();<br /></span><span style="color: #008080; ">3</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> doWashing();<br /></span><span style="color: #008080; ">4</span> <span style="color: #000000; ">}<br /></span><span style="color: #008080; ">5</span> <span style="color: #000000; "></span></div>一看不对呀Q接口不匚wQ怎么办,单,适配吧:(x)<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; "> 1</span> <span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> BoyCanWashClothes {<br /></span><span style="color: #008080; "> 2</span> <span style="color: #000000; ">    <br /></span><span style="color: #008080; "> 3</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">private</span><span style="color: #000000; "> String name </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">; <br /></span><span style="color: #008080; "> 4</span> <span style="color: #000000; ">    <br /></span><span style="color: #008080; "> 5</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> doWashing(){<br /></span><span style="color: #008080; "> 6</span> <span style="color: #000000; ">        System.out.println(name </span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; "> 费了(jin)?ji)牛二虎之力ȝz完?jin)衣服,好篏啊?/span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; "> 7</span> <span style="color: #000000; ">    }<br /></span><span style="color: #008080; "> 8</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 9</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> BoyCanWashClothes(String name) {<br /></span><span style="color: #008080; ">10</span> <span style="color: #000000; ">        </span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">();<br /></span><span style="color: #008080; ">11</span> <span style="color: #000000; ">        </span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.name </span><span style="color: #000000; ">=</span><span style="color: #000000; "> name;<br /></span><span style="color: #008080; ">12</span> <span style="color: #000000; ">    }<br /></span><span style="color: #008080; ">13</span> <span style="color: #000000; ">    <br /></span><span style="color: #008080; ">14</span> <span style="color: #000000; ">}</span></div>只会(x)做饭Q不?x)洗服Q适配以后Q?br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; "> 1</span> <span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> PuteBoy </span><span style="color: #0000FF; ">extends</span><span style="color: #000000; "> BoyCanWashClothes </span><span style="color: #0000FF; ">implements</span><span style="color: #000000; "> IIdealBoyFriend{<br /></span><span style="color: #008080; "> 2</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 3</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">public</span><span style="color: #000000;"> PuteBoy(String name) {<br /></span><span style="color: #008080; "> 4</span> <span style="color: #000000; ">        </span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">(name);<br /></span><span style="color: #008080; "> 5</span> <span style="color: #000000; ">    }<br /></span><span style="color: #008080; "> 6</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 7</span> <span style="color: #000000; ">    @Override<br /></span><span style="color: #008080; "> 8</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> doCooking() {<br /></span><span style="color: #008080; "> 9</span> <span style="color: #000000; ">        System.out.println(</span><span style="color: #000000; ">name+"</span><span style="color: #000000; ">找了(jin)个菜谱,倒腾?jin)半天,l于把饭做熟?jin)?/span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">10</span> <span style="color: #000000; ">    }<br /></span><span style="color: #008080; ">11</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">12</span> <span style="color: #000000; ">}</span></div>妥了(jin)Q学?x)做饭?jin)。细?j)的同学可能发现Q上面的例子其实是类的适配器模式,不但Garin能适配QTom也能QJames也可以。话说Garin用适配器模式摇w一变,?x)做饭?jin)Q但是由于缺乏修|q要花大量时间洗x(chng)友的脏服)(j)Q饭菜味道不地道Q女朋友和他吹了(jin)。又q了(jin)一D|_(d)Garin又找?jin)个新的x(chng)友,q是得会(x)z衣做饭Q而且规定服不能机洗Q只能手z。这回Garin该怎么办呢Q答案还是适配器模式,但是Ҏ(gu)要变?sh)变:(x)<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; "> 1</span> <span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> SmartBoy </span><span style="color: #0000FF; ">implements</span><span style="color: #000000; "> IIdealBoyFriend {<br /></span><span style="color: #008080; "> 2</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 3</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">private</span><span style="color: #000000; "> String name </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; "> 4</span> <span style="color: #000000; ">    <br /></span><span style="color: #008080; "> 5</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> SmartBoy(String name) {<br /></span><span style="color: #008080; "> 6</span> <span style="color: #000000; ">        </span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">();<br /></span><span style="color: #008080; "> 7</span> <span style="color: #000000; ">        </span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.name </span><span style="color: #000000; ">=</span><span style="color: #000000; "> name;<br /></span><span style="color: #008080; "> 8</span> <span style="color: #000000; ">    }<br /></span><span style="color: #008080; "> 9</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">10</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> callHelp(BoyCanWashClothes worker){<br /></span><span style="color: #008080; ">11</span> <span style="color: #000000; ">        </span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.worker </span><span style="color: #000000; ">=</span><span style="color: #000000; "> worker;<br /></span><span style="color: #008080; ">12</span> <span style="color: #000000; ">    }<br /></span><span style="color: #008080; ">13</span> <span style="color: #000000; ">    <br /></span><span style="color: #008080; ">14</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">private</span><span style="color: #000000; "> BoyCanWashClothes worker </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">15</span> <span style="color: #000000; ">    <br /></span><span style="color: #008080; ">16</span> <span style="color: #000000; ">    @Override<br /></span><span style="color: #008080; ">17</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> doCooking() {<br /></span><span style="color: #008080; ">18</span> <span style="color: #000000; ">        System.out.println(name</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; "> 聚精?x)神做菜Q满满的都是爱,饭菜非常可口?/span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">19</span> <span style="color: #000000; ">    }<br /></span><span style="color: #008080; ">20</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">21</span> <span style="color: #000000; ">    @Override<br /></span><span style="color: #008080; ">22</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> doWashing() {<br /></span><span style="color: #008080; ">23</span> <span style="color: #000000; ">        System.out.print(name</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; "> 叫了(jin)自己表弟来帮忙洗服Q?/span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">24</span> <span style="color: #000000; ">        worker.doWashing();<br /></span><span style="color: #008080; ">25</span> <span style="color: #000000; ">    }<br /></span><span style="color: #008080; ">26</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">27</span> <span style="color: #000000; ">}</span></div>q回对于z服这z,Garin学精?jin),不亲自动手?jin)Q叫?jin)一个外_(d)l果׃节省?jin)大量洗衣服旉Q厨艺那是突飞猛q,x(chng)友非常满意,成功q入下一阶段。这个就是对象的适配器模式了(jin)Qƈ不是所有h都有一个善于洗服的表弟。结果Garin通过历练Q顺利从U情男蜕变?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; "> 1</span> <span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> GirlFriendTest {<br /></span><span style="color: #008080; "> 2</span> <span style="color: #000000; "><br /></span><span style="color: #008080; "> 3</span> <span style="color: #000000; ">    </span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 4</span> <span style="color: #008000; ">     * </span><span style="color: #808080; ">@param</span><span style="color: #008000; "> args<br /></span><span style="color: #008080; "> 5</span> <span style="color: #008000; ">     </span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; "> 6</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> main(String[] args) {<br /></span><span style="color: #008080; "> 7</span> <span style="color: #000000; ">        </span><span style="color: #008000; ">//</span><span style="color: #008000; ">使用cȝ代理模式</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 8</span> <span style="color: #008000; "></span><span style="color: #000000; ">        IIdealBoyFriend garin </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> PuteBoy(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Garin</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; "> 9</span> <span style="color: #000000; ">        garin.doCooking();<br /></span><span style="color: #008080; ">10</span> <span style="color: #000000; ">        garin.doWashing();<br /></span><span style="color: #008080; ">11</span> <span style="color: #000000; ">        System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Garin成长?img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /><img src="http://www.aygfsteel.com/Images/dot.gif" alt="" /></span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">12</span> <span style="color: #000000; ">        </span><span style="color: #008000; ">//</span><span style="color: #008000; ">使用对象的代理模?/span><span style="color: #008000; "><br /></span><span style="color: #008080; ">13</span> <span style="color: #008000; "></span><span style="color: #000000; ">        garin </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> SmartBoy(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Garin</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">14</span> <span style="color: #000000; ">        ((SmartBoy)garin).callHelp(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> BoyCanWashClothes(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Garin 表弟</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br /></span><span style="color: #008080; ">15</span> <span style="color: #000000; ">        garin.doCooking();<br /></span><span style="color: #008080; ">16</span> <span style="color: #000000; ">        garin.doWashing();<br /></span><span style="color: #008080; ">17</span> <span style="color: #000000; ">    }<br /></span><span style="color: #008080; ">18</span> <span style="color: #000000; "><br /></span><span style="color: #008080; ">19</span> <span style="color: #000000; ">}</span></div><img src ="http://www.aygfsteel.com/silvermyth/aggbug/426451.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/silvermyth/" target="_blank">Gavin Li</a> 2015-07-27 22:51 <a href="http://www.aygfsteel.com/silvermyth/articles/426451.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>闲话Java设计模式一Q我g的的设计模式http://www.aygfsteel.com/silvermyth/articles/426404.htmlGavin LiGavin LiThu, 23 Jul 2015 16:06:00 GMThttp://www.aygfsteel.com/silvermyth/articles/426404.htmlhttp://www.aygfsteel.com/silvermyth/comments/426404.htmlhttp://www.aygfsteel.com/silvermyth/articles/426404.html#Feedback0http://www.aygfsteel.com/silvermyth/comments/commentRss/426404.htmlhttp://www.aygfsteel.com/silvermyth/services/trackbacks/426404.html
  1. 首先Q要认识到设计模式不是万能的Q要Ҏ(gu)情况灉|q用。要惛_到这点,必须认识到设计模式只??Q设计原则才?#8220;?#8221;。神是根本,型是表象。最高境界就如张三丰和张无忌那段l典的对话,所有的招数忘光是真正掌握?jin)。所以一定要牢牢掌握设计原则Q开闭,依赖反{Q_(ki)c特{等。有一天你发现Ҏ(gu)没有想用设计模式Q但是写的代码都是设计模式的l典案例?/li>
  2. 不要Z(jin)设计模式而设计模式(初始学习(fn)阶段无妨Q,但是不要在项目中q样做。否则代码会(x)不u不类Q充斥着大量无用cR你在项目中应用设计模式的唯一理由是目需要,例如某个法来?x)发生变化等{?/li>
  3. 理论联系实际。设计模式在生活中处处可见,例如适配器,装饰{等。一定要勤于思考,多多联想?/li>

光说不练假把式,接下来,我会(x)用第三hU拟人手法讲qC个纯情小L(fng)如何用设计模式解决生zM的难题。不用类图,不讲概念Q通俗易懂Q老少皆宜。(h待)(j)



Gavin Li 2015-07-24 00:06 发表评论
]]>
վ֩ģ壺 | κ| | | °Ͷ| Ӽ| | | | | | | | | | | | | ̨| 㽭ʡ| | ʢ| | ͩ®| ˫| | | | | Ͷ| | | ƽ| | | | ˻| | ̫| Ľ| |