﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-MikeChen专注电子商务-随笔分类-设计模式</title><link>http://www.blogjava.net/mikechen/category/52348.html</link><description>电子商务技术架构</description><language>zh-cn</language><lastBuildDate>Mon, 06 Aug 2012 11:24:54 GMT</lastBuildDate><pubDate>Mon, 06 Aug 2012 11:24:54 GMT</pubDate><ttl>60</ttl><item><title>结构模式-Composite模式</title><link>http://www.blogjava.net/mikechen/archive/2012/08/06/384936.html</link><dc:creator>陈睿</dc:creator><author>陈睿</author><pubDate>Mon, 06 Aug 2012 09:49:00 GMT</pubDate><guid>http://www.blogjava.net/mikechen/archive/2012/08/06/384936.html</guid><wfw:comment>http://www.blogjava.net/mikechen/comments/384936.html</wfw:comment><comments>http://www.blogjava.net/mikechen/archive/2012/08/06/384936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mikechen/comments/commentRss/384936.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mikechen/services/trackbacks/384936.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>一：使用场景</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp; 1）使用的地方：树形结构，分支结构等</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp; 2）使用的好处：降低客户端的使用，为了达到元件与组合件使用的一致性，增加了元件的编码</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp; 3）使用后的坏处：代码不容易理解，需要你认真去研究，发现元件与组合件是怎么组合的<br /><br /></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>二：一个实际的例子</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 画图形，这个模式，稍微要难理解一点，有了例子就说明了一切，我画的图是用接口做的，代码实现是抽象类为基类，你自己选择了，接口也可以。</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;<img small="0" src="http://hiphotos.baidu.com/feiruinet/pic/item/fbf62338bd76f5ccb311c77a.jpg" style="border: 0px; margin-bottom: 8px; clear: both; max-width: 758px; vertical-align: top; "  alt="" /><br /><br /></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><br /><strong>1）先建立图形元件</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp; package com.mike.pattern.structure.composite;<br />/**<br />* 图形元件<br />*&nbsp;<br />* @author taoyu<br />*&nbsp;<br />* @since 2010-6-23<br />*/<br />public abstract class Graph {<br />/**图形名称*/<br />protected String name;<br /><br />public Graph(String name){<br />&nbsp;&nbsp; this.name=name;<br />}<br /><br />/**画图*/<br />public abstract void draw()throws GraphException;<br /><br />/**添加图形*/<br />public abstract void add(Graph graph)throws GraphException;<br /><br />/**移掉图形*/<br />public abstract void remove(Graph graph)throws GraphException;<br /><br />}<br /></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>2)建立基础图形圆</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">package com.mike.pattern.structure.composite;<br />import static com.mike.util.Print.print;</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">/**<br />* 圆图形<br />*&nbsp;<br />* @author taoyu<br />*&nbsp;<br />* @since 2010-6-23<br />*/<br />public class Circle extends Graph {</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public Circle(String name){<br />&nbsp;&nbsp; super(name);<br />}<br /><br />/**<br />* 圆添加图形<br />* @throws GraphException&nbsp;<br />*/<br />@Override<br />public void add(Graph graph) throws GraphException {<br />&nbsp;&nbsp; throw new GraphException("圆是基础图形，不能添加");<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">/**<br />* 圆画图<br />*/<br />@Override<br />public void draw()throws GraphException {<br />&nbsp;&nbsp; print(name+"画好了");<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">/**<br />* 圆移掉图形<br />*/<br />@Override<br />public void remove(Graph graph)throws GraphException {<br />&nbsp;&nbsp; throw new GraphException("圆是基础图形，不能移掉");<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>3）建立基础图形长方形</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">package com.mike.pattern.structure.composite;<br />import static com.mike.util.Print.print;<br />/**<br />* 长方形<br />*&nbsp;<br />* @author taoyu<br />*&nbsp;<br />* @since 2010-6-23<br />*/<br />public class Rectangle extends Graph {</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public Rectangle(String name){<br />&nbsp;&nbsp; super(name);<br />}<br /><br />/**<br />* 长方形添加<br />*/<br />@Override<br />public void add(Graph graph) throws GraphException {<br />&nbsp;&nbsp; throw new GraphException("长方形是基础图形，不能添加");<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">/**<br />* 画长方形<br />*/<br />@Override<br />public void draw() throws GraphException {<br />&nbsp;&nbsp; print(name+"画好了");<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">@Override<br />public void remove(Graph graph) throws GraphException {<br />&nbsp;&nbsp; throw new GraphException("长方形是基础图形，不能移掉");<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">}<br /></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>4）最后简历组合图形</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">package com.mike.pattern.structure.composite;</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">import java.util.ArrayList;<br />import java.util.List;<br />import static com.mike.util.Print.print;</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">/**<br />* 图形组合体<br />*&nbsp;<br />* @author taoyu<br />*&nbsp;<br />* @since 2010-6-23<br />*/<br />public class Picture extends Graph {<br />private List&lt;Graph&gt; graphs;<br /><br />public Picture(String name){<br />&nbsp;&nbsp; super(name);<br />&nbsp;&nbsp; /**默认是10个长度*/<br />&nbsp;&nbsp; graphs=new ArrayList&lt;Graph&gt;();<br />}<br /><br /><br />/**<br />* 添加图形元件<br />*/<br />@Override<br />public void add(Graph graph) throws GraphException {<br />&nbsp;&nbsp; graphs.add(graph);<br />}<br /><br />/**<br />* 图形元件画图<br />*/<br />@Override<br />public void draw() throws GraphException {<br />&nbsp;&nbsp; print("图形容器："+name+" 开始创建");<br />&nbsp;&nbsp; for(Graph g : graphs){<br />&nbsp;&nbsp;&nbsp; g.draw();<br />&nbsp;&nbsp; }<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">/**<br />* 图形元件移掉图形元件<br />*/<br />@Override<br />public void remove(Graph graph) throws GraphException {<br />&nbsp;&nbsp; graphs.remove(graph);<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>5）最后测试</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public static void main(String[] args)throws GraphException {<br />&nbsp;&nbsp; /**画一个圆，圆里包含一个圆和长方形*/<br />&nbsp;&nbsp; Picture picture=new Picture("立方体圆");<br />&nbsp;&nbsp; picture.add(new Circle("圆"));<br />&nbsp;&nbsp; picture.add(new Rectangle("长方形"));<br />&nbsp;&nbsp;<br />&nbsp;&nbsp; Picture root=new Picture("怪物图形");&nbsp;<br />&nbsp;&nbsp; root.add(new Circle("圆"));<br />&nbsp;&nbsp; root.add(picture);<br />&nbsp;&nbsp; root.draw();<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">6)使用心得：的确降低了客户端的使用情况，让整个图形可控了，当是你要深入去理解，才真名明白采用该模式的含义，不太容易理解。</p><img src ="http://www.blogjava.net/mikechen/aggbug/384936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mikechen/" target="_blank">陈睿</a> 2012-08-06 17:49 <a href="http://www.blogjava.net/mikechen/archive/2012/08/06/384936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>结构模式-Adapter适配器模式</title><link>http://www.blogjava.net/mikechen/archive/2012/08/06/384935.html</link><dc:creator>陈睿</dc:creator><author>陈睿</author><pubDate>Mon, 06 Aug 2012 09:38:00 GMT</pubDate><guid>http://www.blogjava.net/mikechen/archive/2012/08/06/384935.html</guid><wfw:comment>http://www.blogjava.net/mikechen/comments/384935.html</wfw:comment><comments>http://www.blogjava.net/mikechen/archive/2012/08/06/384935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mikechen/comments/commentRss/384935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mikechen/services/trackbacks/384935.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>一：使用场景</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp; 1）使用的地方：我想使用两个不同类的方法，这个时候你需要把它们组合起来使用</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp; 2）目前使用的情况：我会把两个类用户组合的方式放到一起，编程思想think in java里已经提到个，能尽量用组合就用组合，继承一般考虑再后。</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp; 3）使用后的好处：你不需要改动以前的代码，只是新封装了一新类，由这个类来提供两个类的方法，这个时候：一定会想到facade外观模式，本来是多个类使用的情况，我新封装成一个类来使用，而这个类我采用组合的方式来包装新的方法。我的理解是，设计模式本身就是为了帮助解决特定的业务场景而故意把模式划分对应的模式类别，其实大多数情况，都解决了同样的问题，这个时候其实没有必要过多的纠缠到模式的名字上了，你有好的注意，你甚至取一个新的名字来概括这样的使用场景。</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 4）使用的坏处：适配器模式，有两种方式来实现。一个是组合一个是继承，我觉得，首先应该考虑组合，能用组合就不要用继承，这是第一个。第二个，你采用继承来实现，那肯定会加大继承树结构，如果你的继承关系本身就很复杂了，这肯定会加大继承关系的维护，不有利于代码的理解，或则更加繁琐。继承是为了解决重用的为题而出现的，所以我觉得不应该滥用继承，有机会可以考虑同样别的方案。<br /><br /></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>二：一个实际的例子</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关联营销的例子，用户购买完商品后，我又推荐他相关别的商品</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于减少代码，方法我都不采用接口，直接由类来提供，代码只是一个范例而已，都精简了。</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>1)创建订单信息</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public class Order {<br />private Long orderId;<br />private String nickName;<br /><br />public Order(Long orderId,String nickName){<br />&nbsp;&nbsp; this.orderId=orderId;<br />&nbsp;&nbsp; this.nickName=nickName;<br />}<br /><br />/**<br />* 用户下订单<br />*/<br />public void insertOrder(){<br />&nbsp;&nbsp;<br />}<br />}<br /><br /></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>2）商品信息</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public class Auction {<br />/**商品名称*/<br />private String name;<br /><br />/**制造商*/<br />private String company;<br /><br />/**制造日期*/<br />private Date date;<br /><br /><br />public Auction(String name,String company, Date date){<br />&nbsp;&nbsp; this.name=name;<br />&nbsp;&nbsp; this.company=company;<br />&nbsp;&nbsp; this.date=date;<br />}<br /><br />/**<br />* 推广的商品列表<br />*/<br />public void commendAuction(){<br />&nbsp;&nbsp;<br />}<br /><br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>3）购物</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public class Trade {<br />/**用户订单*/<br />private Order order;<br /><br />/**商品信息*/<br />private Auction auction;<br /><br />public Trade(Order order ,Auction auction){<br />&nbsp;&nbsp; this.order=order;<br />&nbsp;&nbsp; this.auction=auction;<br />}<br /><br />/**<br />* 用户产生订单以及后续的事情<br />*/<br />public void trade(){<br />&nbsp;&nbsp; /**下订单*/<br />&nbsp;&nbsp; order.insertOrder();<br />&nbsp;&nbsp;<br />&nbsp;&nbsp; /**关联推荐相关的商品*/<br />&nbsp;&nbsp; auction.commendAuction();<br />}<br /><br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>&nbsp;&nbsp; 4）使用心得：</strong>其实外面采用了很多继承的方式，order继承auction之后，利用super .inserOrder()再加一个auction.recommendAuction(),实际上大同小异，我到觉得采用组合更容易理解以及代码更加优美点。</p><img src ="http://www.blogjava.net/mikechen/aggbug/384935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mikechen/" target="_blank">陈睿</a> 2012-08-06 17:38 <a href="http://www.blogjava.net/mikechen/archive/2012/08/06/384935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>创建模式-Builder模式</title><link>http://www.blogjava.net/mikechen/archive/2012/08/06/384934.html</link><dc:creator>陈睿</dc:creator><author>陈睿</author><pubDate>Mon, 06 Aug 2012 09:37:00 GMT</pubDate><guid>http://www.blogjava.net/mikechen/archive/2012/08/06/384934.html</guid><wfw:comment>http://www.blogjava.net/mikechen/comments/384934.html</wfw:comment><comments>http://www.blogjava.net/mikechen/archive/2012/08/06/384934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mikechen/comments/commentRss/384934.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mikechen/services/trackbacks/384934.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>一：使用场景</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp; 1)使用到的地方：如果你想创建类似汽车这样的对象，首先要创建轮子，玻璃，桌椅，发动机，外廓等，这些部件都创建好后，最后创建汽车成品，部件的创建和汽车的组装过程本身都很复杂的情况，希望把部件的创建和成品的组装分开来做，这样把要做的事情分割开来，降低对象实现的复杂度，也降低以后成本的维护，把汽车的部件创建和组装过程独立出两个对应的工厂来做，有点类似建立两个对应的部件创建工厂和汽车组装工厂两个工厂，而工厂只是创建一个成品，并没有把里面的步骤也独立出来，应该说Builder模式比工厂模式又进了一步。</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 2）采用Builder模式后的好处：把一个负责的对象的创建过程分解，把一个对象的创建分成两个对象来负责创建，代码更有利于维护，可扩性比较好。</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp; 3）采用Builder模式后的坏处：实现起来，对应的接口以及部件的对象的创建比较多，代码相对来讲，比较多了，估计刚开始你会有点晕，这个可以考虑代码精简的问题，增加代码的可读性。 &nbsp;<br /><br /></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>二：一个实际的例子</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>汽车的组装</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;<strong>1)首先创建汽车这个成品对象，包含什么的成员</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public class Car implements Serializable{<br /><br />/**<br />* 汽车序列号<br />*/<br />private static final long serialVersionUID = 1L;</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">/**汽车轮子*/<br />private Wheel wheel;<br /><br />/**汽车发动机*/<br />private Engine engine;<br /><br />/**汽车玻璃*/<br />private Glass glass;<br /><br />/**汽车座椅*/<br />private Chair chair;</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><br />public Wheel getWheel() {<br />&nbsp;&nbsp; return wheel;<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public void setWheel(Wheel wheel) {<br />&nbsp;&nbsp; this.wheel = wheel;<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public Engine getEngine() {<br />&nbsp;&nbsp; return engine;<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public void setEngine(Engine engine) {<br />&nbsp;&nbsp; this.engine = engine;<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public Glass getGlass() {<br />&nbsp;&nbsp; return glass;<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public void setGlass(Glass glass) {<br />&nbsp;&nbsp; this.glass = glass;<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public Chair getChair() {<br />&nbsp;&nbsp; return chair;<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public void setChair(Chair chair) {<br />&nbsp;&nbsp; this.chair = chair;<br />}<br /><br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>2）创建对应汽车零部件</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public class Wheel {<br />public Wheel(){<br />&nbsp;&nbsp; print("--汽车轮子构建完毕--");<br />}<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public class Engine {<br />public Engine(){<br />&nbsp;&nbsp; print("--汽车发动机构建完毕--");<br />}<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public class Glass {<br />public Glass(){<br />&nbsp;&nbsp; print("--汽车玻璃构建完毕--");<br />}<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public class Chair {<br />public Chair(){<br />&nbsp;&nbsp; print("--汽车座椅构建完毕--");<br />}<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>3）开始重点了，汽车成品的组装过程</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp; public interface Builder {<br />/**组装汽车轮子*/<br />public void buildWheel();<br /><br />/**组装汽车发动机*/<br />public void buildEngine();<br /><br />/**组装汽车玻璃*/<br />public void buildGlass();<br /><br />/**组装汽车座椅*/<br />public void buildChair();<br /><br />/**返回组装好的汽车*/<br />public Car getCar();<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">以及实现类</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public class CarBuilder implements Builder {<br />/**汽车成品*/<br />private Car car;<br /><br />public CarBuilder(){<br />&nbsp;&nbsp; car=new Car();<br />}<br /><br />/**组装汽车轮子*/<br />@Override<br />public void buildChair() {<br />&nbsp;&nbsp; car.setChair(new Chair());<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">/**组装汽车发动机*/<br />@Override<br />public void buildEngine() {<br />&nbsp;&nbsp; car.setEngine(new Engine());<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">/**组装汽车玻璃*/<br />@Override<br />public void buildGlass() {<br />&nbsp;&nbsp; car.setGlass(new Glass());<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">/**组装汽车座椅*/<br />@Override<br />public void buildWheel() {<br />&nbsp;&nbsp; car.setWheel(new Wheel());<br />}<br /><br />/**返回组装好的汽车*/<br />@Override<br />public Car getCar() {<br />&nbsp;&nbsp; buildChair();<br />&nbsp;&nbsp; buildEngine();<br />&nbsp;&nbsp; buildGlass();<br />&nbsp;&nbsp; buildWheel();<br />&nbsp;&nbsp; print("--整个汽车构建完毕--");<br />&nbsp;&nbsp; return car;<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>4）最后汽车创建测试</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp; public static void main(String[] args) {<br />&nbsp;&nbsp; /**创建汽车组装*/<br />&nbsp;&nbsp; Builder carBuilder=new CarBuilder();<br />&nbsp;&nbsp; Car car=carBuilder.getCar();<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp; 最后输出：</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">--汽车座椅构建完毕--<br />--汽车发动机构建完毕--<br />--汽车玻璃构建完毕--<br />--汽车轮子构建完毕--<br />--整个汽车构建完毕--</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp; 5）<strong>体会心得：</strong>Builder模式实际的重点就把汽车的组装过程和零部件的生产分开来实现，零部件的生成主要靠自己的对象来实现，我上面只是在构造函数里创建了，比较简单，而重点汽车的组装则交给CarBuilder来实现，最终由builder来先负责零部件的创建，最后返回出成品的汽车。</p><img src ="http://www.blogjava.net/mikechen/aggbug/384934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mikechen/" target="_blank">陈睿</a> 2012-08-06 17:37 <a href="http://www.blogjava.net/mikechen/archive/2012/08/06/384934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>创建模式-singleon单例模式</title><link>http://www.blogjava.net/mikechen/archive/2012/08/06/384932.html</link><dc:creator>陈睿</dc:creator><author>陈睿</author><pubDate>Mon, 06 Aug 2012 09:33:00 GMT</pubDate><guid>http://www.blogjava.net/mikechen/archive/2012/08/06/384932.html</guid><wfw:comment>http://www.blogjava.net/mikechen/comments/384932.html</wfw:comment><comments>http://www.blogjava.net/mikechen/archive/2012/08/06/384932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mikechen/comments/commentRss/384932.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mikechen/services/trackbacks/384932.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>一：使用场景<br /></strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 1）经常使用的地方：一个类只有一个实例，eg:页面访问统计pv，统计的个数就只能保证一个实例的统计。</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 2）我们目前使用的情况：比如我想创建一个对象，这个对象希望只有一份实例的维护，在内存的保存也只有一份，也就是在同一个jvm的java堆里只保存一份实例对象，所以你会想一办法，在创建这个对象的时候，就已经能保证只有一份。</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 3）怎么改进：定义该对象的时候，就保证是同一份实例，比如：定义为私有构造函数，防止通过new的方式可以创建对象，然后在对象里定义一个静态的私有成员（本身对象的一个实例），然后再创建一个外面访问该对象的方法就好了。</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 4）改进的好处：代码在编译代码这个级别就被控制了，不至于在jvm里运行的时候才来保证，把唯一实例的创建保证在编译阶段；jvm里内存只有一份，从而内存占有率更低，以及更方便java垃圾回收</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 5）改进后的坏处：只能是代码稍微需要更多点，其实大家最后发现改进后的坏处，都是代码定义比之间要多一点，但以后的维护代码就降下来了，也短暂的代码量偏大来换取以后代码的精简。<br /><br /></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>二：一个实际的例子</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">总体的例子</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">package com.mike.pattern.singleton;</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">/**<br />* 总统<br />*&nbsp;<br />* @author taoyu<br />*&nbsp;<br />* @since 2010-6-22<br />*/<br />public class President {<br />private President(){<br />&nbsp;&nbsp; System.out.println("总统已经选举出来了");<br />}<br /><br />/**总统只有一个*/<br />private static President president=new President();<br /><br />/**<br />* 返回总统<br />*/<br />public static President getPresident(){<br />&nbsp;&nbsp; return president;<br />}<br /><br />/**<br />* 总统宣布选举成功<br />*/<br />public void announce(){<br />&nbsp;&nbsp; System.out.println("伟大的中国人民，我将成你们新的总统");<br />}<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">/**<br />* @param args<br />*/<br />public static void main(String[] args) {<br />&nbsp;&nbsp; President president=President.getPresident();<br />&nbsp;&nbsp; president.announce();<br />}</p><img src ="http://www.blogjava.net/mikechen/aggbug/384932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mikechen/" target="_blank">陈睿</a> 2012-08-06 17:33 <a href="http://www.blogjava.net/mikechen/archive/2012/08/06/384932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>创建模式-工厂模式</title><link>http://www.blogjava.net/mikechen/archive/2012/08/06/384931.html</link><dc:creator>陈睿</dc:creator><author>陈睿</author><pubDate>Mon, 06 Aug 2012 09:28:00 GMT</pubDate><guid>http://www.blogjava.net/mikechen/archive/2012/08/06/384931.html</guid><wfw:comment>http://www.blogjava.net/mikechen/comments/384931.html</wfw:comment><comments>http://www.blogjava.net/mikechen/archive/2012/08/06/384931.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mikechen/comments/commentRss/384931.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mikechen/services/trackbacks/384931.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">1.<strong>使用场景<br /></strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp; 1）子类过多，不容易管理；构造对象过程过长；精简代码创建；<br /></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 2)目前我们代码情况： 编写代码的时候，我们经常都在new对象，创建一个个的对象，而且还有很多麻烦的创建方式，eg:HashMap&lt;String,Float&gt; grade=new HashMap&lt;String,Float&gt;(),这样的代码创建方式太冗长了，难道你没有想过把这个创建变的短一点么，比如：HashMap&lt;String,Float&gt;grade=HashMapFactory.new(),可以把你创建精简一点；你也可以还有别的需求，在创建对象的时候，你需要不同的情况，创建统一种类别的对象，eg:我想生成不同的汽车，创建小轿车，创建卡车，创建公交汽车等等，都属于同种类别：汽车，你难道没有想过，我把这些创建的对象在一个工厂里来负责创建，我把创建分开化，交给一人来负责，这样可以让代码更加容易管理，创建方式也可以简单点。</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">比如：Car&nbsp;&nbsp;&nbsp; BMW=CarFactory.create(bmw);&nbsp;&nbsp; 把创建new由一个统一负责，这样管理起来相当方便</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 3）怎么改进：这个时候，你会想到，创建这样同类别的东西，我把这个权利分出去，让一个人来单独管理，它只负责创建我的对象这个事情，所以你单独简历一个对象来创建同类的对象，这个时候，你想这个东西有点像工厂一样，生成同样的产品，所以取了个名字：工厂模式，顾名思义，只负责对象的创建</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 4）改进后的好处：代码更加容易管理了，代码的创建要简洁很多。</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 5）改进后的坏处：那就是你需要单独加一个工厂对象来负责创建，多需要写点代码。<br /><br /></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>2.一个实际的例子<br /><br /></strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; "><strong>&nbsp;&nbsp; 创建宝马汽车与奔驰汽车的例子</strong></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp; 1）先提取出一个汽车的公用接口Car</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public interface Car{</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /**行驶*/&nbsp;&nbsp;&nbsp;&nbsp;</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void drive();</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /><br /></p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp; 2)宝马和奔驰汽车对象</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public class BMWCar implements Car {</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">/**<br />* 汽车发动<br />*/<br />public void drive(){<br />&nbsp;&nbsp; System.out.println("BMW Car drive");<br />}<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">public class BengCar implements Car {</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">/**<br />* 汽车发动<br />*/<br />public void drive(){<br />&nbsp;&nbsp; System.out.println("BengChi Care drive");<br />}<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 3)单独一个汽车工厂来负责创建</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp;&nbsp; public class FactoryCar {<br />/**<br />* 制造汽车<br />*<br />* @param company 汽车公司<br />* @return 汽车<br />* @throws CreateCarException 制造汽车失败异常<br />*/<br />public static Car createCar(Company company)throws CreateCarException{<br />&nbsp;&nbsp; if(company==Company.BMW){<br />&nbsp;&nbsp;&nbsp; return new BMWCar();<br />&nbsp;&nbsp; }else if(company==Company.Beng){<br />&nbsp;&nbsp;&nbsp; return new BengCar();<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; return null;<br />}<br />}</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; 4）最后的代码实现：</p><p style="margin: 0px; padding: 0px; color: #454545; font-family: 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; line-height: 25px; background-color: #ffffff; ">&nbsp;&nbsp;&nbsp; Car BMWCar=FactoryCar.createCar(Company.BMW);<br />&nbsp;&nbsp;&nbsp;&nbsp; BMWCar.drive();</p><img src ="http://www.blogjava.net/mikechen/aggbug/384931.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mikechen/" target="_blank">陈睿</a> 2012-08-06 17:28 <a href="http://www.blogjava.net/mikechen/archive/2012/08/06/384931.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式我的理解</title><link>http://www.blogjava.net/mikechen/archive/2012/08/06/384928.html</link><dc:creator>陈睿</dc:creator><author>陈睿</author><pubDate>Mon, 06 Aug 2012 09:22:00 GMT</pubDate><guid>http://www.blogjava.net/mikechen/archive/2012/08/06/384928.html</guid><wfw:comment>http://www.blogjava.net/mikechen/comments/384928.html</wfw:comment><comments>http://www.blogjava.net/mikechen/archive/2012/08/06/384928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mikechen/comments/commentRss/384928.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mikechen/services/trackbacks/384928.html</trackback:ping><description><![CDATA[<p style="margin: 0px; font-family: 微软雅黑, 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; ">&nbsp; &nbsp;1. 我说下我对设计模式的理解：任何一样事物都是因为有需求的驱动才诞生的，所以设计模式也不例外，我们平时在编写代码的时候，随着时间的深入，发现很多代码很难维护，可扩展性级差，以及代码的效率也比较低，这个时候你肯定会想办法让代码变的优美又能解决你项目中的问题，所以在面向对象语言里，你肯定会去发现很多可以重用的公用的方法，比如：接口的存在，你自然就想到了，让你定义的方法与你的实现分开，也可以很方便把不同的类与接口匹配起来，形成了一个公用的接口，你会发现这样做，好处会是非常多的，解决了你平时想把代码的申明与逻辑实现的分开。</p><p style="margin: 0px; font-family: 微软雅黑, 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; ">&nbsp;&nbsp;&nbsp; 2. 这个时候，你发现了，本身面向对象的语言里，已经暗藏了很多好处，你肯定会仔细去分析面向对象这个语言，认真去挖掘里面更多的奥秘，最后，你发现了，原来你可以把面向对象的特性提取成一个公用的实现案例，这些案例里能帮助你解决你平时编写代码的困扰，而这样一群人，就是所谓gof的成员，他们从平时设计建筑方面找到了灵感，建筑的设计也可以公用化以及重用化，所以他们也提取了相关的软件设计方面的公用案例，也就有了下面的相关的所谓23种设计模式，而里面这么多模式，你也可以把他们归类起来，最后发现就几类模式：创建，结构，行为等模式类别，而这些现成的方案，也可以在实际应用中充分发挥作用，随着大家的使用以及理解，发现其实这些所谓的模式里，你的确可以让你的代码变的更加优美与简练。</p><p style="margin: 0px; font-family: 微软雅黑, 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; ">&nbsp;&nbsp;&nbsp; 3. 我比较喜欢把代码变的更加优美与简练，优美的代码就是一看就懂，结构很清晰，而简历就是一目了然，又可以解决你的问题，就是代码又少效率又高，所以平时要养成写java doc的习惯，这样的代码才为清晰，所以才会更加优美。</p><p style="margin: 0px; font-family: 微软雅黑, 'Microsoft Yahei', 微软雅黑, Tahoma, Arial, Helvetica, STHeiti; ">&nbsp;&nbsp;&nbsp; 4. 这些就是我对设计模式的理解，所以这么好的宝贝，我们不去深入的了解，的确可惜了，这就叫站到巨人的肩膀上.....</p><img src ="http://www.blogjava.net/mikechen/aggbug/384928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mikechen/" target="_blank">陈睿</a> 2012-08-06 17:22 <a href="http://www.blogjava.net/mikechen/archive/2012/08/06/384928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>