设计模式一:策略模式(Strategy Pattern)

本文介绍了设计模式中的策略模式,通过将一组算法封装成独立的类,使得它们可以互换。文章通过一个鸭子飞行行为的例子展示了如何实现算法的独立性和可替换性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[color=blue]今天从图书馆借了本 Head First设计模式,小看了一章,感觉挺不错的所以写下来当作备忘:[/color]

[size=medium][color=brown]书里关于这个模式的定义是:定义了算法族,分别封闭起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户.以下是一个简单的实例,具体的流程是:

先把公共的信息定义在一个父类或者是父接口中,该父类或者父接口中的变量用的都是接口类型(这些接口类型都有其实现的具体子类,暂称为a吧),然后在实现或者继承了父接口或者父类的子类(暂称为b)中针对的是父类或者父接口中的接口进行编程,最后在测试类或者是具体功能类中只需实例化a后赋给针对接口类型编程的地方,这样一来就可以实现具体算法与具体用户之间的独立和替换;[/color][/size]

首先是父接口:

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();
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值