策略模式——Head First Design Patterns

本文介绍了一种设计模式——策略模式,该模式通过定义一系列可以互相替换的算法,使得算法的使用方能够在不改变代码结构的情况下应对业务功能的变化。适用于功能定制性强的场景。文章通过示例代码展示了策略模式的具体应用。

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

定义:设计一组可以互相替换的算法,使得算法使用者不会因为算法的变化而在代码结构上受到影响。

 

使用场景:业务功能经常发生改变或者定制性比较强的功能点

类图:

 

代码样例:典型的Has-A关系

 

public abstract class Duck {
	FlyBehavior flyBehavior;
	QuackBehavior quackBehavior;
 
	public Duck() {
	}
 
	public void setFlyBehavior (FlyBehavior fb) {
		flyBehavior = fb;
	}
 
	public void setQuackBehavior(QuackBehavior qb) {
		quackBehavior = qb;
	}
 
	abstract void display();
 
	public void performFly() {
		flyBehavior.fly();
	}
 
	public void performQuack() {
		quackBehavior.quack();
	}
 
	public void swim() {
		System.out.println("All ducks float, even decoys!");
	}
}


 

public interface FlyBehavior {
	public void fly();
}


 

public class Quack implements QuackBehavior {
	public void quack() {
		System.out.println("Quack");
	}
}

 

 

public interface QuackBehavior {
	public void quack();
}


 

public class FlyWithWings implements FlyBehavior {
	public void fly() {
		System.out.println("I'm flying!!");
	}
}


 

 

 

优点:1)算法可以互相替换,减少对代码结构的影响

 

缺点:

 

类似的设计模式:

 

配套的内功心法:

    1)识别可能会变化的功能,封装它们,以减少对稳定功能的影响;

    2)尽量面向接口编程而不是面向实现编程;

   3)优先使用组合,而非继承;

   4)程序员可以通过设计模式提升沟通效率

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值