精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2008-03-24
今天从图书馆借了本 Head First设计模式,小看了一章,感觉挺不错的所以写下来当作备忘:
书里关于这个模式的定义是:定义了算法族,分别封闭起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户.以下是一个简单的实例,具体的流程是: 先把公共的信息定义在一个父类或者是父接口中,该父类或者父接口中的变量用的都是接口类型(这些接口类型都有其实现的具体子类,暂称为a吧),然后在实现或者继承了父接口或者父类的子类(暂称为b)中针对的是父类或者父接口中的接口进行编程,最后在测试类或者是具体功能类中只需实例化a后赋给针对接口类型编程的地方,这样一来就可以实现具体算法与具体用户之间的独立和替换; 首先是父接口: package com.jie.pattern; public interface Duck { public IFly fly=null; //这里两个都是接口类型 public ICry cry=null; // public void display(); } 接着是两个接口的定义: package com.jie.pattern; public interface IFly { public void fly(); } package com.jie.pattern; public interface ICry { public void cry(); } 然后是实现了父接口的子类: package com.jie.pattern; public class FlyDuck implements Duck{ public IFly fly=null; public FlyDuck() { } public void setFly(IFly fly) { this.fly=fly; } public void fly() { fly.fly(); } public void display() { System.out.println("Fly's duck..."); } } 然后是实现了接口的具体类: package com.jie.pattern; public class FlyDuck implements Duck{ public IFly fly=null; public FlyDuck() { } public void setFly(IFly fly) { this.fly=fly; } public void fly() { fly.fly(); } public void display() { System.out.println("Fly's duck..."); } } 最后当然少不了一个测试类: package com.jie.pattern; public class Test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub FlyDuck flyDuck=new FlyDuck(); flyDuck.setFly(new SubFly());//这里可以用实现了接口的具体类的实例来进行替代; flyDuck.fly(); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-03-24
看起来不错.
|
|
返回顶楼 | |
发表时间:2008-06-11
我突然想到一个问题,如果不同算法要求输入的参数不一样,怎么办?
|
|
返回顶楼 | |
发表时间:2008-08-06
这本书 我也正在看,但是太抽象,我花了两个小时看完,不知所云
|
|
返回顶楼 | |
发表时间:2008-08-12
我看的是大话设计模式,比较好理解,那本翻译过来的我实在不敢恭维,太难理解。
适合自己才是最好的。 这个模式我在php里经常用,偷懒的时候经常这么干,把经常变动的提出来,放到一个方法里,然后继承重写,或放到一个对象里,每次传递过来。 |
|
返回顶楼 | |
发表时间:2008-08-18
设计模式最好结合实际应用来看。
做了一个项目或者模块后,再来看看设计模式,这样比较好点 |
|
返回顶楼 | |
发表时间:2008-08-18
colven 写道 这本书 我也正在看,但是太抽象,我花了两个小时看完,不知所云
哥们看书太快了吧 我瞎翻都翻了两个礼拜 我觉得这本书讲得够明白了 |
|
返回顶楼 | |
发表时间:2008-08-20
我觉得每个人对封装、继承和多态的理解都有所不同,所以就产生了多种设计模式,
设计模式本身没有好坏之分,每个有一定编程经验的人都可以自己写设计模式,而 光靠一种设计模式往往是不能解决实际问题的,评论设计模式的好坏没有任何意义, 关键是看是否能解决或最接近的解决实际问题! |
|
返回顶楼 | |
发表时间:2008-08-20
SubFly
这个类在哪里? 根本连代码都写错。还谈什么收获? |
|
返回顶楼 | |
发表时间:2008-08-20
感觉设计模式几乎都是利用类的继承,用顶层类实现参数或变量的透明。
|
|
返回顶楼 | |