ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-31 10:02:04  阅读:198  来源: 互联网

标签:fly 策略 void 模式 class 算法 笔记 设计模式 public


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

使用组合而不是继承

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

策略模式使算法在客户使用时独立,解耦了算法和算法的使用者,使得我们可以在算法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)]

标签:fly,策略,void,模式,class,算法,笔记,设计模式,public
来源: https://blog.csdn.net/weixin_45622336/article/details/121060478

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有