精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2008-08-20
aninfeel 写道 感觉设计模式几乎都是利用类的继承,用顶层类实现参数或变量的透明。 利用类的继承,兄弟,再好好学习设计模式吧,不懂不要乱说话! |
|
返回顶楼 | |
发表时间:2008-08-20
这样就能和设计模式车上关系?秒似你的代码就是个面向接口编程吧,你这套玩意我在spring里天天打交道。
|
|
返回顶楼 | |
发表时间:2008-12-06
bloodrate 写道 我突然想到一个问题,如果不同算法要求输入的参数不一样,怎么办?
我也考虑到这个问题,书上说 策略模式有三种角色 : 1:环境(context)角色 : 持有对 策略类的引用 2:抽象策略角色 3:具体策略角色 但具体策略角色 参数可能不相同,可能引入 个性参数 ,比如 卖书打折那个例子 。 这时候 环境角色 那个 类真不知道怎么写好 ? 我 干脆 都没写 直接 就 用了 。 单元测试类 : public class DiscountTest extends TestCase { public void testMain() { //总额百分比 策略 NoDiscountStrategy discountStrategy = new NoDiscountStrategy(32.5, 24); // //固定折扣额 策略 // FlatRateStrategy discountStrategy = new FlatRateStrategy(32.5, 24); // discountStrategy.setAmmount(2); // //总额百分比 策略 // PercentageStrategy discountStrategy = new PercentageStrategy(32.5,24); // discountStrategy.setPercent(0.85); double discount = discountStrategy.calculateDiscount(); System.out.println(discountStrategy.getClass().getName() + " 折扣额为 : " + discount); } } 感觉 用的 有点 心虚 。 不知道 哪位知道 地道的用法 。 |
|
返回顶楼 | |
发表时间:2008-12-07
laiseeme 写道 colven 写道 这本书 我也正在看,但是太抽象,我花了两个小时看完,不知所云
哥们看书太快了吧 我瞎翻都翻了两个礼拜 我觉得这本书讲得够明白了 确实,这书很多地方都是一点即止. |
|
返回顶楼 | |
发表时间:2008-12-08
最后修改:2008-12-08
书里关于这个模式的定义是:定义了算法族,分别封闭起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户
=============================================== 看到这个定义,就感觉眼界不远,思想不深!所站的角度,就不像站在软件设计这个解度看问题。 打开软件设计教本,软件开发,是从需求到代码,一步步进行推演,最后进入维护直到软件生命结束。也就是说,软件设计,首要的是面对需求,不是代码。此书,直接把与代码相关的算法,进行定义,可见其眼界之远近,思维之深度。 按他的这个重视角度上看,各位应先找出一大堆算法,然后进行封装。晕,这是写算法包,还是写函数包? 好像与我们见到的软件设计有点不一样吧?首先,我们接到一个客户的单,问清要求,然后进行调查,然后再进行软件设计。可不是一来,就封装一大堆算法。 我所见到的设计模式书,李建忠的讲义(不好意思,不是他的粉丝,也不推销它的书,本人当年是在网上当的),张口闭口都是需求,然后是UML的类图,然后是代码实现。 虽然从某个角度上说,这种理解也有道理,但是并没有站在软件设计这个角度上的,因此我认为把这本书不看也罢! |
|
返回顶楼 | |
发表时间:2008-12-08
对楼主说声sorry!把这个模式,看成了模式的定义。结果是策略模式的定义。
对设计模式有三年没复习了,连概念也模糊了! |
|
返回顶楼 | |
发表时间:2008-12-10
最后修改:2008-12-10
这是具体教材
http://tech.ddvip.com/2008-11/122584658688974.html 下面是uml类图 根据类图,作出下面个的观察总结与理解: 策略模式, 具体策略类ConcreteStrategyA 、ConcreteStrategyB、。。。。他们都有同名同参数的方法, 仅实现不同。 在Context类中,需要给它注入(或生成)策略对象( 即ConcreteStrategyA 、ConcreteStrategyB、。。。。的对象 concreteStrategyA 、concreteStrategyB、。。。。) . 在Context类中,再使用这些具体策略类对象的方法。 从实现角度上总结:类对象注入(或生成)。与所注入的对象相对应的类 仅仅是封装了相同形式但不同算法罢了。没有什么好神秘的。 一种运用场景, 根据不同条件,运用不同的策略.如:游戏中,如果是怕火的人,就用火攻的策略,如果是怕毒的人,就用毒气。 如果用伪java解说,则如下: public class ConcreteStrategy { puvlic void 攻击(){}; } public class ConcreteStrategy火 extends ConcreteStrategy { puvlic void 攻击(){ //发出三昧真火 }; } public class ConcreteStrategy毒 extends ConcreteStrategy { puvlic void 攻击(){ //发出唐门无色无味,闻着倒 }; } public class content { public void 战场( String 敌人特征){ if (敌人特征==("怕火")){ ConcreteStrategy 自已的策略= new ConcreteStrategy火(); 自已的策略.攻击(); } if (敌人特征=="怕毒"){ ConcreteStrategy 自已的策略= new ConcreteStrategy毒(); 自已的策略.攻击(); } } } 说明: 1 上面不是java语言,为了解说而使用类似java语法的形式说明。其中<敌人特征==("怕火")>中,关于字符串用等于符号,在java中是非常不对的。 2 上面的例子还有很强的耦合。为了解耦,请使用类反射器解耦。 |
|
返回顶楼 | |
发表时间:2008-12-24
yunhaifeiwu 写道 这是具体教材
http://tech.ddvip.com/2008-11/122584658688974.html 下面是uml类图 根据类图,作出下面个的观察总结与理解: 策略模式, 具体策略类ConcreteStrategyA 、ConcreteStrategyB、。。。。他们都有同名同参数的方法, 仅实现不同。 在Context类中,需要给它注入(或生成)策略对象( 即ConcreteStrategyA 、ConcreteStrategyB、。。。。的对象 concreteStrategyA 、concreteStrategyB、。。。。) . 在Context类中,再使用这些具体策略类对象的方法。 从实现角度上总结:类对象注入(或生成)。与所注入的对象相对应的类 仅仅是封装了相同形式但不同算法罢了。没有什么好神秘的。 一种运用场景, 根据不同条件,运用不同的策略.如:游戏中,如果是怕火的人,就用火攻的策略,如果是怕毒的人,就用毒气。 如果用伪java解说,则如下: public class ConcreteStrategy { puvlic void 攻击(){}; } public class ConcreteStrategy火 extends ConcreteStrategy { puvlic void 攻击(){ //发出三昧真火 }; } public class ConcreteStrategy毒 extends ConcreteStrategy { puvlic void 攻击(){ //发出唐门无色无味,闻着倒 }; } public class content { public void 战场( String 敌人特征){ if (敌人特征==("怕火")){ ConcreteStrategy 自已的策略= new ConcreteStrategy火(); 自已的策略.攻击(); } if (敌人特征=="怕毒"){ ConcreteStrategy 自已的策略= new ConcreteStrategy毒(); 自已的策略.攻击(); } } } 说明: 1 上面不是java语言,为了解说而使用类似java语法的形式说明。其中<敌人特征==("怕火")>中,关于字符串用等于符号,在java中是非常不对的。 2 上面的例子还有很强的耦合。为了解耦,请使用类反射器解耦。 这位同学讲的在理。 幽默啊! |
|
返回顶楼 | |
发表时间:2009-01-24
建议看看《深入浅出设计模式》!
|
|
返回顶楼 | |
发表时间:2009-01-24
package com.jie.pattern;
public interface Duck { public IFly fly=null; //这里两个都是接口类型 public ICry cry=null; // public void display(); } 这个接口中放两个常量干嘛?这两个默认的可是static final类型的, 不需要的! |
|
返回顶楼 | |