设计模式之策略模式(笔记)

本文介绍了设计模式中的策略模式,通过使用组合而非继承来复用代码,使得算法变化不影响客户端。在鸭子范例中,展示了如何通过FlyStrategy接口实现不同飞行行为的切换,如FlyNoWay和FlyWithWings,从而实现鸭子类在不修改的情况下改变飞行行为。
摘要由CSDN通过智能技术生成

设计模式之策略模式(笔记)

使用组合而不是继承

策略模式定义了一系列的算法,封装每个算法,让他们之间可以相互替换,策略模式让算法的变化独立于使用算法的客户。

策略模式使算法在客户使用时独立,解耦了算法和算法的使用者,使得我们可以在算法A、算法B、算法C之间任意切换,无论是使用哪一个算法,如果算法发生了改变,Client都不需要做出任何改变,如果想要修改其中一个算法,修改算法的实现,你可以不用同时修改使用它的用户,当客户端不需要做任何改动,类比集合的实现。

简单的策略模式

UML类图

image-20211026215947865

他通过使用组合而非继承的方式来实现了代码的复用,作为一个使用了策略模式的类(Client),他持有者策略模式的接口类(IBahavior),这个抽象的策略类有各种不同的实现,当我们在构造Client的时候,就可以传入不同的接口实现类完成对IBahavior字段的初始化。

鸭子范例

public abstract class Duck {
	FlyStrategy flyStrategy;
	public Duck() {
		
	}
	public abstract void display();
	public void performFly() {
		flyStrategy.fly();
	}
	
}

public interface FlyStrategy {
	public void fly();
}

public class FlyNoWay implements FlyStrategy{
	@Override
	public void fly() {
		// TODO Auto-generated method stub
		System.out.println("I can not fly");
	}
}

public class FlyWithWings implements FlyStrategy{
	@Override
	public void fly() {
		// TODO Auto-generated method stub
		System.out.println("I am flying");
	}
}

public class MallarDuck extends Duck{
	public MallarDuck() {
		// TODO Auto-generated constructor stub
		this.flyStrategy=new FlyNoWay();
		//this.quackStrategy=new 
	}
	@Override
	public void display() {
		// TODO Auto-generated method stub
		
	}
	
}
public class Client {
	public static void main(String[] args) {
		MallarDuck mallarDuck = new MallarDuck();
		mallarDuck.performFly();
	}
}

image-20211031094917549

rDuck.performFly();
}
}


[外链图片转存中...(img-w3JJBWrq-1635645273214)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值