随笔分类 -  设计模式

摘要:package pkg.book;//工厂主要生产物品的抽象接口(该工厂主要生产书本)public interface Book { public String name(); public int TotalPages(); public double price();}package pkg.book;//工厂生产数学书public class MathBook implements Book{ @Override public int TotalPages() { return 200; } @Override public String name() { return "Ma 阅读全文
posted @ 2014-03-03 11:26 Mr轨迹 阅读(237) 评论(0) 推荐(0)
摘要://工厂主要生产物品的抽象接口(该工厂主要生产书本)public interface Book { public String name(); public int TotalPages(); public double price();}//工厂生产数学书public class MathBook implements Book{ @Override public int TotalPages() { return 200; } @Override public String name() { return "Math Book"; } @Override public 阅读全文
posted @ 2014-03-03 10:57 Mr轨迹 阅读(221) 评论(0) 推荐(0)
摘要:对于装饰模式的个人理解:就是在物体上进行某种状态的增强,直白的说:比如一个火箭,默认只有一个推进器,现在想让火箭飞行的更远一点,我们需要在原来的火箭基础上面再添加一个火箭推进器,这样我们原来的火箭就可以依靠2节推进器,飞行的更远了。假如以后我们需求改变,需要有一种飞行更远更远的火箭,我们不需要修改原来的火箭,只要继续追加推进器的数量就行了。这样的解决方案就是装饰模式的精髓。依照上面的案例解释,想想思路,一个燃料接口(FuelInterface),具体的2种燃料(Gas,Hydrogen),Gas下还包括一种增强型燃料(SuperGas),一个测试火箭(Rocket),开始写代码:public 阅读全文
posted @ 2013-12-30 13:41 Mr轨迹 阅读(250) 评论(0) 推荐(0)
摘要:命令模式,个人理解:将具体的类的A方法抽象提升到父类层次,这样在调用时,就可以直接依据当前类来选择相关方法并执行,有点像C++中的虚函数。简写的伪代码:父类 F 中的方法eat(). 子类A,B各自实现自己的eat方法,比如A.eat(){吃梨子},B.eat(){吃米饭}测试主程序:F a = new A();F b = new B();a.eat(); //显示吃梨子b.eat(); //显示吃米饭但是我们可以看出来a,b都是F类型,这个就可以在调用时方便数据的传送了。假如现在有一个函数eatSomething(F f),我们调用的时候就可以这样来写:eatSomething(a),eat 阅读全文
posted @ 2013-12-27 14:50 Mr轨迹 阅读(212) 评论(0) 推荐(0)
摘要:组合模式个人理解:首先确定它的结构是一个树形,用生活中的比方来说:一个公司的总经理下面有很多副经理,副经理下面有很多秘书。这就是一个树形结构,作为总经理,可以管理手下的所有副经理和秘书,而副经理只能管理手下拥有的那些秘书,他不能管理不归他管理的秘书。这就是组合模式应用的点,对整体(总经理)的操作,影响下属的所有受管理的对象,而对部分(副经理)的操作,不会影响到总经理。这种设计模式的微妙确实很多,对外界来说,我可以更有层次的管理。至于其它优点,可以自己琢磨,网上也有人总结了这种模式的优点,不过都是有点太死板,不够实例化,比如:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对 阅读全文
posted @ 2013-12-27 10:30 Mr轨迹 阅读(257) 评论(0) 推荐(0)
摘要:备忘录模式的个人理解:使用Memento模式的好处在于可以将以前曾经拥有的状态再次获得。相当于游戏中的存档一样,我们经常在打Boss的时候会先存档,然后再打Boss,防止我们在挑战Boss的过程中牺牲了,然后前面关卡上玩的金币呀,经验呀,装备呀什么的都没有了。所以我们可以在挑战Boss失败的时候,重新读档,再次开打。这个我经常用在仙剑的游戏中。。。备忘录模式简单的一句话就是:事先把数据存档,将来重新读档。备忘录模式中主要的对象有:Originator,Memento,CareTaker。首先,作为一个Originator,它必须要有自己的数据域,以便被我们的Memento来复制存储。Memen 阅读全文
posted @ 2013-12-26 14:43 Mr轨迹 阅读(438) 评论(0) 推荐(0)
摘要:外观模式的主要解决的问题是:隐藏具体的内部实现,给外界的调用提供一个统一简单的接口,降低程序调用上面的耦合。比如我们驾驶一辆汽车,我们不需要考虑发动机的齿轮是怎么运转的,刹车片是怎么来刹车的。我们只需要有几个踏板,一个方向盘,几个按钮就可以驾驶一辆汽车了。这里我实现的是一个电脑开机的过程,同样电脑开机的具体操作已经被电脑封装起来了,我们只需要按一个按钮,就可以开机了。幕后的CPU,硬盘,显示器的一系列启动都被隐藏起来。CPU类:public class CPU { public void work() { System.out.println("CPU is working...&q 阅读全文
posted @ 2013-12-25 15:46 Mr轨迹 阅读(233) 评论(0) 推荐(0)
摘要:单例模式主要是为了确保在程序运行期,有且只有一个实例对象。整个程序共享这个唯一的单例对象。在程序的使用中,这种设计模式很常见。这里我就写一个我曾经学习时用到的案例:唯一的月亮。设计这个月亮类的时候,我们需要注意以下几个点1)私有构造方法 (防止外部可以用new来创建月亮类的实例)2)私有静态类实例3)公共方法getInstance,该公共方法为静态方法。然后思路清晰,上代码:package demo;public class Moon { private static Moon moon; //月有阴晴圆缺的状态 public String state; private Moon() { s. 阅读全文
posted @ 2013-12-25 11:55 Mr轨迹 阅读(289) 评论(0) 推荐(0)
摘要:其实我以前也有学习过设计模式,也写过一些代码。这次在看代码时,发现设计模式使用的泛滥,想想我的设计模式学习的不够扎实,所以重新拾起,把以前没有学习的设计模式学习一遍,把学习过的设计模式在重温一遍。第一篇我选择的是观察者模式。我在项目代码中看到这个模式,项目中的使用大概说一下:服务器与客户端的交互,服务器端的代码使用了观察者模式,作用是:当用户发送请求以后,通过注册的Manager管理类来调用相应的方法处理用户的请求。这里做一个报社新闻给用户推送新闻的案例(当报社推送新闻的时候,所有订阅了报社的读者可以阅读报纸):方案一:采用Java自带的观察者接口实现,如下:首先是报社类,继承了Observa 阅读全文
posted @ 2013-12-24 17:44 Mr轨迹 阅读(225) 评论(0) 推荐(0)