[/table] |
|
设计模式)的文档与资料,如果你下载过看过不止四五份你就会发现,虽然他们的说法都有自己的一套,但是总是有千人一面的地方。而我要告诉你的是,这一面,就是你所需要的东西了。 |
|
|
对于工厂模式而言,每个人都会有自己的体会与看法。就比如有的人说他是将代码按照其功能模块化了,也有人说他就是一个分配机制,好比把不同的工作交给不同的人去做一样,将对象的功能的实现交给一些特制的类去完成,等等等等。只要是接触过的人,就可以说出一种他的立场上看到的工厂模式。 |
|
|
但是在这里我要告诉你的是,工厂模式他的关键是:将创建对象和使用对象分开。在这样的一个过程中不仅仅达到了理清编写者自己思路的作用,也使得代码脉络更加清晰明朗,简洁易懂。不知道大家还记不记得曾经讲哈夫曼树的时候那棵充斥我们一个多礼拜的哈夫曼树?我想说,现在这棵树是没了,但是重新出现了一座庞大的工厂 |
在这个工厂里边分工明确权责分明,他的每一个子工厂都只负责生产某一种特别的产品,而每一种产品也对应着每一个子工厂的生产线。现在只要想编写一个程序,就不知道绝的先考虑将它 |
,将它的每一个步骤每一个功能先大卸八块的区分清楚,然后才开始代码的实际编写工作 |
|
|
好了,闲话就不多说了,下面我们就通过实例来讲讲什么是创建对象和使用对象分开。 |
|
|
(例)比如我想造一辆宝马车并让它跑起来,以前我们都是写一个宝马车的类然后直接在这个类里边实例化一个他的对象,完了以后紧接着在下边写宝马车的跑的方法,是吧?但是工厂模式不这么做,工厂模式怎么做呢?请看下面的步骤: |
|
|
|
|
1. public interface Car { |
|
|
|
|
写一个宝马车的类,让他去继承上面这个车的总接口,并且实现里边的方法: |
|
|
|
1. public class BMW implements Car{ |
|
|
|
|
|
是不是少了什么?呵呵你有车的接口和实现类了当然得有造车工厂咯,是吧?于是我们同样给它定义一个造车工厂总接口以及一个继承并且实现它的宝马造车工厂: |
|
|
|
1. public interface CarFactory { |
|
2. public Car build(String name) ; |
|
|
|
|
|
1. public class BMWFactory implements CarFactory{ |
|
|
3. private static BMWFactory ins; |
|
|
5. public static BMWFactory getIns(){ |
|
|
|
|
|
|
|
|
|
|
15. public Car build(String name) { |
|
|
17. if(name.equals("BMW")){ |
|
|
|
|
|
|
|
|
|
|
有的人就会有点牢骚了,我不想老是自己跑工厂去,那样多麻烦!是吧?好,那么我们就给他写一个且车代理商: |
|
|
|
1. public class AgentFactor { |
|
2. private static AgentFactor ins; |
|
3. public static AgentFactor getIns(){ |
|
|
5. ins=new AgentFactor(); |
|
|
|
|
|
|
11. public CarFactory getCarFactor(String Name){ |
|
12. if(Name.equals("BMW")){ |
|
13. return new BMWFactory(); |
|
|
|
|
|
|
好了,车有了,造车工厂有了,连代理商都给你搞定了,那么就让我们来写个主函数让我们的宝马车跑起来吧! |
|
|
|
1. public class CarTest { |
|
|
|
4. CarFactory ic=AgentFactor.getIns().getCarFactor("BMW"); |
|
5. Car mini=ic.build("MINI"); |
|
|
|
|
|
当然了,也不是真的就让上面的代码跑起来,细心如你,肯定会发现上面的这几行代码是跑不起来的,是不是?具体是为什么呢,哈哈就留给你咯!虽然上面给大家的几行代码不能够直接跑起来,但是通过他们,我想大家对于工厂模式这个概念应该会有一个比较清晰的把握了吧。再次说一遍:工厂模式,就是将对象的创建与使用分开。这样做的目的,自己开动脑经咯 |
|
|
|
以来就一直在跟鼠标监听器等等各种事件监听器打交道,对于这些个零零总总的各式各样的监听器也并不陌生吧?但是对于这些鼠标监听器啊键盘监听器啊什么的,他的具体的实现方式是怎么样的你是否清楚呢?如果你是一个足够细心而好学的人,那么我接下来要说的东西对你来说可能是没什么必要的了,因为你肯定看过这些监听器它的源码,也必然知道他的运行机制与原理了。 |
|
|
|
|
(例)在做通信的时候我们曾经做过收到消息并且让他显示在一个 |
上的话就得对代码进行一些联动的改动,很是麻烦。我们且看事件监听模式怎么解决这个问题: |
|
|
|
|
|
|
|
2. public interface Msg { |
|
3. public byte getType();// |
|
4. public String getText();// |
|
|
|
|
|
|
1. public class TextMsg implements Msg{ |
|
|
|
4. public TextMsg(String text){ |
|
|
|
7. public String getText() { |
|
|
|
|
11. public byte getType() { |
|
|
|
|
|
|
|
|
|
|
2. public interface MsgProcess { |
|
具体的处理器,所有的处理器实现类都必须实现这个方法 |
|
4. void processMsg(Msg msg); |
|
|
|
|
|
|
1. import javax.swing.JLabel; |
|
|
3. public class JLabelProcess extends JLabel implements MsgProcess{ |
|
4. public void processMsg(Msg msg) { |
|
5. String t=msg.getText(); |
|
|
|
|
9. System.out.println(t); |
|
|
|
|
上,你可以另外写一个监听器的类继承上面的监听器接口: |
|
|
|
1. import javax.swing.JButton; |
|
|
3. public class JButtonProcess extends JButton implements MsgProcess{ |
|
4. public void processMsg(Msg msg) { |
|
5. String t=msg.getText(); |
|
|
|
|
|
编写一个线程,我们将模拟生成消息(事件源)放在这个线程里边来做: |
|
|
|
1. public class NetConn extends Thread{ |
|
|
|
4. ArrayList<MsgProcess> ips=new ArrayList<MsgProcess>(); |
|
|
6. public void addMsgProcess(MsgProcess p){ |
|
|
|
|
|
|
|
|
|
15. Msg s=new TextMsg(" |
|
|
17. for(int t=0;t<ips.size();t++){ |
|
18. MsgProcess pro=ips.get(t); |
|
|
|
|
|
23. } catch (InterruptedException e) {e.printStackTrace();} |
|
|
|
|
|
|
|
好的,做完了上面的这些工作,接下来就让我们来写一个主函数吧: |
|
|
|
1. import java.awt.FlowLayout; |
|
2. import javax.swing.JFrame; |
|
|
|
5. public static void main(String srga[]){ |
|
6. NetConn nc=new NetConn(); |
|
|
|
9. JLabelProcess lp=new JLabelProcess(); |
|
10. nc.addMsgProcess(lp); |
|
11. JButtonProcess tp=new JButtonProcess(); |
|
12. nc.addMsgProcess(tp); |
|
|
14. JFrame jf=new JFrame("test"); |
|
|
|
|
|
19. jf.setLayout(new FlowLayout()); |
|
|
|
22. jf.setDefaultCloseOperation(3); |
|
|
|
|
事件监听模式介绍到这里你是不是心里隐隐感觉,这个世界上的好多事情都变成了一个个事件源和一个个监听处理器了?如果对于事件监听模式还有一些不解或者困惑,请细心看上面提供的代码示例,慢慢体会它里边所蕴含的一些东西,相信你会获得意想不到的收获的! |
|
|
好了,说完了两种比较罗嗦一点的工厂和事件监听模式,下面让我们来看看一种比较简单的 |
设计模式:单例模式。对于单例模式我想我不用说大家也能够说出这种模式就是实现单实例的,没错,就是如此! |
|
|
单例就是:保证一个类仅有一个实例,仅提供一个访问它的全局访问点。 |
|
|
|
当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。 |
|
当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。 |
|
|
|
|
1. public class Singleton { |
|
|
3. private static Singleton sing; |
|
|
|
|
|
|
9. public static Singleton getInstance() { |
|
|
11. sing = new Singleton(); |
|
|
|
|
|
|
|
|
2. public static void main(String[] args) { |
|
3. Singleton sing = Singleton.getInstance(); |
|
4. Singleton sing2 = Singleton.getInstance(); |
|
|
6. System.out.println(sing); |
|
7. System.out.println(sing2); |
|
|
|
|
[table=100%,white]ok |