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

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

使用组合而不是继承

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

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

简单的策略模式

UML类图

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

他通过使用组合而非继承的方式来实现了代码的复用,作为一个使用了策略模式的类(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();
	}
}

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

rDuck.performFly();
}
}


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

上一篇:js常用数据类型转换


下一篇:[Bzoj2120]数颜色 (非正解 )(莫队)