Readers: 101 | Updated: 04-02

Head First Design Patterns 读后感3-策略模式

Translate Into:

网站: JavaEye  作者: wangpx  链接:http://wangpx.javaeye.com/blog/178534  发表时间: 2008年04月01日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

策略模式-定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。策略模式有点像调包计和偷梁换柱。
设计模式就是为了适应变化那些大师而想起来的,能适应变化的软件才能长命,人也一样,只有适应外界变化,方可生存。


package pattern;
public abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck() {
}
public abstract void display();
public void performFly() {
flyBehavior.fly();
}
public void performQuack() {
quackBehavior.quack();
}
public void setFlyBehavior(FlyBehavior fb) {
flyBehavior = fb;
}
public void setQuackBehavior(QuackBehavior qb) {
quackBehavior = qb;
}
public void swim() {
System.out.println("All ducks float,even decoys!");
}
}
interface FlyBehavior {
public void fly();
}
class FlyWithWings implements FlyBehavior {
public void fly() {
System.out.println("I am flying!!");
}
}
class FlyNoWay implements FlyBehavior {
public void fly() {
System.out.println("i can not flying !!");
}
}
class FlyRocketPowered implements FlyBehavior {
public void fly() {
System.out.println("i am flying with a rocket!");
}
}
interface QuackBehavior {
public void quack();
}
class Quack implements QuackBehavior {
public void quack() {
System.out.println("Quack");
}
}
class MuteQuack implements QuackBehavior {
public void quack() {
System.out.println("<<>Silence>");
}
}
class Squeak implements QuackBehavior {
public void quack() {
System.out.println("Squeak");
}
}
class MallardDuck extends Duck {
public MallardDuck() {
quackBehavior = new Quack();
flyBehavior = new FlyWithWings();
}
public void display() {
System.out.println("i am a real Mallard duck");
}
}
class ModelDuck extends Duck {
public ModelDuck() {
flyBehavior = new FlyNoWay();
quackBehavior = new Quack();
}
public void display() {
System.out.println("i am a model duck");
}
}
class MiniDuckSimulator {
public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.performFly();
Duck model = new ModelDuck();
model.performFly();
model.performQuack();
model.setFlyBehavior(new FlyWithWings());
model.setQuackBehavior(new Squeak());
model.performFly();
model.performQuack();
}
}
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐




From The Blogs

Personal Growth, Career Planning

2007
打破电子邮件的使用模式
我想给你们提供一个快速更新邮件方法,它可以让你摆脱每隔10分钟就是检查自己邮件的坏习惯,我简单说明也就是最近"回复你文章".这个方法已经一个多星期了,我也已看到这个实验获得的成功:纪律我现在只在上午9... 查看全文

2007
不同类型公司的商业模式设计
原文作者:Alexander Osterwalder 原文链接:Business Model Design & Unbundling the Corporation 译者:M 在读Kaplan... 查看全文

Personal Growth, Career Planning

01-08
如何打破消极思维模式
假设你有种坏习惯:总是不断重复某种消极的想法;并假设这想法跟生活中的事件并无关系,仅仅是种消极的念头,诸如“我好沮丧”或“我讨厌我的工作”或“我干不了这个”或“我讨厌变胖”。被这样的思想占据脑海时,你... 查看全文

Internet Observation

06-04
按F8无法进入安全模式的解决方法
我今天遇到出乎预料的问题,现在想和大家分享一下我碰到的情况以及解决方法。 按F8能够在系统启动和加载菜单之间的时间空隙里提供各种选择,比如说进入系统安全模式或恢复最后一次正确配置。我遇到的问题是无论我... 查看全文

中国美容化妆品网 - 最新文章

03-14
透析化妆品慈善会议营销模式
销售与慈善看起来似乎是风马牛不相及的两个概念,但某化妆品公司却把两者巧妙的组合起来,取得了鱼和熊掌可以兼得的效果。那么这二者有何相关之处呢?笔者认为从消费者方面来说,销售的过程就是掌握和打动消费者的情... 查看全文

wangjue的BLOG

01-13
视频盈利模式新解:营销“视频”
《互联网周刊》 2007-11-05  作者:曹慧敏 这一年,中国的视频网站从30多家暴增到300多家,网络视频整体呈现出迅速崛起的态势,然而也是在这一年里,那些无法跨越技术、内容版权、高昂成本等多重... 查看全文

幸福生活博客The Way To Happiness

01-14
警惕:12项职场缺陷的行为模式
什么样的行为模式会成为致命缺陷,严重地阻碍职业生涯?华德普与巴特勒归纳出12项职场缺陷的行为模式。  1.总觉得自己不够好这种人虽然聪明、有历练,但是一旦被提拔,反而毫无自信,觉得自己不胜任。此外,他... 查看全文

一葉千鳥

01-10
五对页面信息模式
近日梳理遇到的互联网上的各类信息模式,发现大略可以分为五对共十种。互联网门户的频道首页和网络专题页。它们的共同点是流量大,手工更新,不同点是频道首页是领域,网络专题是热点,频道首页是信息高频度持续更新... 查看全文

夏涛的外贸网络营销博客

05-26
外贸管理软件B/S和C/S架构应用模式的探析
夏涛:我个人不觉得B/S就一定比C/S结构好,因为每家企业的情况不同,适用的情况就不同,以阿里巴巴的外贸软件为例,它使用B/S结构管理邮件和客户资料,在规模中大型数据量大的外贸企业就不适合,因为超过2... 查看全文

对牛乱弹琴 | Playin' with IT

05-26
东拉西扯:阿里妈妈模式
阿里妈妈模式,并不是一种全新的模式,它基本是中国互联网上存在已久的网站联盟模式,加上Google AdSense模式的一种综合体。阿里妈妈的优势在于,凭借阿里巴巴平台已有的电子商务客户,它天然地拥有了... 查看全文
More Articles