﻿<?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-生活的理想是为了理想的生活</title><link>http://www.blogjava.net/mymy5/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 20 Jun 2026 13:29:16 GMT</lastBuildDate><pubDate>Sat, 20 Jun 2026 13:29:16 GMT</pubDate><ttl>60</ttl><item><title>设计模式之单态模式(Singleton)</title><link>http://www.blogjava.net/mymy5/articles/146107.html</link><dc:creator>杨显华</dc:creator><author>杨显华</author><pubDate>Tue, 18 Sep 2007 03:41:00 GMT</pubDate><guid>http://www.blogjava.net/mymy5/articles/146107.html</guid><wfw:comment>http://www.blogjava.net/mymy5/comments/146107.html</wfw:comment><comments>http://www.blogjava.net/mymy5/articles/146107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mymy5/comments/commentRss/146107.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mymy5/services/trackbacks/146107.html</trackback:ping><description><![CDATA[<p>什么是单态模式,其实很简单,就是让一个对象只能生成一个实例.Singleton的目的就是控制对象的产生.Singleton一般应用在资源访问,数据库连接等只需(能)有一个实例的地方.单态模式的设计就是完成一个对象是否存在并且是否需要创建的问题:<br />
实例:<br />
/**<br />
&nbsp;* yangxh_520@yahoo.com.cn<br />
&nbsp;* @author mymy5<br />
&nbsp;* 2007.09.18<br />
&nbsp;*/<br />
//设计模式的构造有好几种方式它们有各自的优缺点<br />
(1)第一种形式,此种方法使用了static 需要放弃同步</p>
<p>package cn.yxh.shejimoshi.singleton;</p>
<p>public class MySingleton {<br />
&nbsp;public void printTxt(){<br />
&nbsp;&nbsp;System.out.println("单态模式1");<br />
&nbsp;}<br />
&nbsp;private static MySingleton _instance = new MySingleton(); //注意为private仅供内部调用<br />
&nbsp;private MySingleton(){//构造对象<br />
&nbsp;}<br />
&nbsp;public static MySingleton getInstance(){<br />
&nbsp;&nbsp;return _instance;<br />
&nbsp;}<br />
&nbsp;<br />
}<br />
(2)第二种形式,使用同步关键字synchronized&nbsp; <br />
使用synchronized 如果是多个线程,会消耗很大内存,并且有可能造成瓶颈<br />
</p>
<p>package cn.yxh.shejimoshi.singleton;</p>
<p>public class MySingleton2 {<br />
&nbsp;private static MySingleton2 _instance;<br />
&nbsp;public void printTxt(){<br />
&nbsp;&nbsp;System.out.println("单态模式2");<br />
&nbsp;}<br />
&nbsp;public static synchronized&nbsp; MySingleton2 getInstance(){<br />
&nbsp;&nbsp;if(_instance==null){<br />
&nbsp;&nbsp;&nbsp;_instance = new MySingleton2();<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return _instance;<br />
&nbsp;}<br />
}<br />
(3)使用比较多人用的Double-checked locking<br />
</p>
<p>package cn.yxh.shejimoshi.singleton;</p>
<p>public class MySingleton3 {<br />
&nbsp;private static MySingleton3 _instance;<br />
&nbsp;public void printTxt(){<br />
&nbsp;&nbsp;System.out.println("单态模式3");<br />
&nbsp;}<br />
&nbsp;public static &nbsp;MySingleton3 getInstance(){<br />
&nbsp;&nbsp;if(_instance==null){<br />
&nbsp;&nbsp;&nbsp;synchronized(MySingleton3.class){<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(_instance==null){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_instance = new MySingleton3();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp; return _instance;<br />
&nbsp;}<br />
}<br />
</p>
<img src ="http://www.blogjava.net/mymy5/aggbug/146107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mymy5/" target="_blank">杨显华</a> 2007-09-18 11:41 <a href="http://www.blogjava.net/mymy5/articles/146107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式之原型模式(Prototype)</title><link>http://www.blogjava.net/mymy5/articles/146059.html</link><dc:creator>杨显华</dc:creator><author>杨显华</author><pubDate>Tue, 18 Sep 2007 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/mymy5/articles/146059.html</guid><wfw:comment>http://www.blogjava.net/mymy5/comments/146059.html</wfw:comment><comments>http://www.blogjava.net/mymy5/articles/146059.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mymy5/comments/commentRss/146059.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mymy5/services/trackbacks/146059.html</trackback:ping><description><![CDATA[<p>原型模式就是通过一个对象创建另一个对象,简单的理解就是复制一个对象,至于复制的细节不需要去了解<br />
而Java使用Cloneable接口的Clone方法实现对象复制,所以要实现Cloneable接口<br />
实例:<br />
/**<br />
&nbsp;* yangxh_520@yahoo.com.cn<br />
&nbsp;* @author mymy5<br />
&nbsp;* 2007.09.18<br />
&nbsp;*/<br />
(1)抽象类AbstractClassClone ()&nbsp;&nbsp;&nbsp; 实现Cloneable接口</p>
<p>package cn.yxh.shejimoshi.Prototype;</p>
<p>public&nbsp; class AbstractClassClone implements Cloneable{<br />
&nbsp;String spoonName;</p>
<p>&nbsp;public String getSpoonName() {<br />
&nbsp;&nbsp;return spoonName;<br />
&nbsp;}</p>
<p>&nbsp;public void setSpoonName(String spoonName) {<br />
&nbsp;&nbsp;this.spoonName = spoonName;<br />
&nbsp;}<br />
&nbsp;public Object clone() throws CloneNotSupportedException<br />
&nbsp;{<br />
&nbsp;&nbsp;Object object = null;<br />
&nbsp;&nbsp;object = super.clone();<br />
&nbsp;&nbsp;//Cloneable&nbsp; object = new AbstractClassClone(); 生成clone对象的另外一种方法 return object<br />
&nbsp;&nbsp;return object;<br />
&nbsp;}<br />
}<br />
(2)抽象类的实现AbstractClassCloneImpl <br />
</p>
<p>package cn.yxh.shejimoshi.Prototype;</p>
<p>public class AbstractClassCloneImpl extends AbstractClassClone {<br />
&nbsp;public AbstractClassCloneImpl(){<br />
&nbsp;&nbsp;this.setSpoonName("工厂模式--原型(prototype)");<br />
&nbsp;}<br />
}<br />
(3)工厂类FactoryForClone <br />
</p>
<p>package cn.yxh.shejimoshi.Prototype;</p>
<p>public class FactoryForClone {<br />
&nbsp;public AbstractClassClone getInstance(){<br />
&nbsp;&nbsp;return new AbstractClassCloneImpl();<br />
&nbsp;}<br />
}<br />
</p>
<p>(4)测试类Test<br />
</p>
<p>package cn.yxh.shejimoshi.Prototype;</p>
<p>public class Test {</p>
<p>&nbsp;public static void main(String[] args) throws CloneNotSupportedException {<br />
&nbsp;&nbsp;FactoryForClone factory = new FactoryForClone();<br />
&nbsp;&nbsp;AbstractClassClone test = factory.getInstance();<br />
&nbsp;&nbsp;AbstractClassCloneImpl test2 = (AbstractClassCloneImpl)test.clone();<br />
&nbsp;&nbsp;System.out.println(test2.spoonName);<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>}<br />
</p>
<p><br />
</p>
<img src ="http://www.blogjava.net/mymy5/aggbug/146059.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mymy5/" target="_blank">杨显华</a> 2007-09-18 09:42 <a href="http://www.blogjava.net/mymy5/articles/146059.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式之工厂模式(Factory)</title><link>http://www.blogjava.net/mymy5/articles/146049.html</link><dc:creator>杨显华</dc:creator><author>杨显华</author><pubDate>Tue, 18 Sep 2007 01:21:00 GMT</pubDate><guid>http://www.blogjava.net/mymy5/articles/146049.html</guid><wfw:comment>http://www.blogjava.net/mymy5/comments/146049.html</wfw:comment><comments>http://www.blogjava.net/mymy5/articles/146049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mymy5/comments/commentRss/146049.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mymy5/services/trackbacks/146049.html</trackback:ping><description><![CDATA[工厂模式是在实际应用中采用的模式.所谓工厂模式,在形式上就是代替了我们平时所使用的New操作,把由New生成对象的操作交由工厂完成,这样做的最大好处是达到上层应用和下层具体实现解耦的目的.<br />
实例:<br />
/**<br />
&nbsp;* yangxh_520@yahoo.com.cn<br />
&nbsp;* @author mymy5<br />
&nbsp;* 2007.09.18<br />
&nbsp;*/<br />
(1)抽象类AbstactClassTest <br />
<br />
<p>package cn.yxh.shejimoshi.factory;</p>
<p>public abstract class AbstactClassTest {<br />
&nbsp;public void printSomething(){};//抽象方法,打印什么<br />
}<br />
(2)抽象类的实现类AbstactClassTestImpl <br />
<br />
</p>
<p>package cn.yxh.shejimoshi.factory;</p>
<p>public class AbstactClassTestImpl extends AbstactClassTest {<br />
&nbsp;public void printSomething(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //实现抽象类的抽象方法<br />
&nbsp;&nbsp;System.out.println("工厂模式--抽象方法实现类打印!");<br />
&nbsp;};</p>
<p>}<br />
(3)抽象工厂InterfaceTest ,用来生成具体的工厂<br />
<br />
package cn.yxh.shejimoshi.factory;</p>
<p>public interface InterfaceTest {<br />
&nbsp;public AbstactClassTest instance(); //抽象方法<br />
}<br />
</p>
<p>(4)工厂的具体实现类InterfaceTestImple <br />
</p>
<p>package cn.yxh.shejimoshi.factory;</p>
<p>public class InterfaceTestImple implements InterfaceTest {</p>
<p>&nbsp;public AbstactClassTest instance() { //抽象方法的实现,负责对象的生成<br />
&nbsp;&nbsp;return new AbstactClassTestImpl();<br />
&nbsp;}</p>
<p>}<br />
</p>
<p>(4)测试类Test<br />
</p>
<p>package cn.yxh.shejimoshi.factory;</p>
<p><br />
public class Test {</p>
<p>&nbsp;public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {<br />
&nbsp;&nbsp;InterfaceTest i = new InterfaceTestImple();&nbsp; //生成工厂<br />
&nbsp;&nbsp;AbstactClassTest a= i.instance();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//工厂生成对象<br />
&nbsp;&nbsp;a.printSomething();<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;Class c&nbsp; = Class.forName("cn.yxh.shejimoshi.factory.AbstactClassTestImpl"); //生成对象的其他方法<br />
&nbsp;&nbsp;System.out.println(c.getName());<br />
&nbsp;&nbsp;AbstactClassTestImpl asd = (AbstactClassTestImpl)c.newInstance();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使用class的newInstance来生成方法<br />
&nbsp;&nbsp;asd.printSomething();<br />
&nbsp;&nbsp;<br />
&nbsp;}<br />
}<br />
先生成工厂,用工厂生成对象,用到的始终是对象的抽象类,当改写下层实现时不影响上层使用,</p>
<p><br />
&nbsp;</p>
 <img src ="http://www.blogjava.net/mymy5/aggbug/146049.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mymy5/" target="_blank">杨显华</a> 2007-09-18 09:21 <a href="http://www.blogjava.net/mymy5/articles/146049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>