10000Hours资料

本文主要介绍10000Hours资料 方法和在新技术下所面对的“挑战”,方便大家深入理解10000Hours资料 过程。本文也将分享10000Hours资料 所遇到的问题和应对策略,怎么解决怎么做的问题。
通过深入本文可以理解代码原理,进行代码文档的下载,也可以查看相应 Demo 部署效果。

策略模式

策略模式

定义:

策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。(其实类似于if-else模式)

设计原则:

将一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。原理是用多态实现的。

适用场景:

系统有很多类,它们的区别仅在于行为不同,一个系统需要动态地在几种算法中选择一种。

组成:

策略模式中包含三部分:
策略(Strategy):策略是一个接口,该接口定义若干个算法标识,即定义了若干个抽象方法。
具体策略(ConcreteStrategy):具体策略是实现策略接口的类,具体策略实现策略接口所定义的抽象方法,即给出算法标识的具体算法。
上下文(Context):上下文是依赖于策略接口的类,即上下文包含有策略声明的变量。上下文中提供一个方法,该方法委托策略变量调用具体策略所实现的策略接口中的方法。

优缺点:

优点:符合开闭原则,增加程序的可扩展性和可维护性;避免多个if-else判断
缺点:客户端必须知道所有策略类,并自行决定使用哪一个策略类

类图:

Strategy接口定义了一个算法族,均实现了behavior()方法。
Context是使用到该算法族的类,它的dosomething()方法会调用behavior(),setStrategy(Strategy)方法可以动态地改变strategy对象,即动态改变Context使用的算法。
10000Hours

tip:

一般情况下,策略模式会结合工厂模式或单例模式一起使用

使用策略模式的源码:

java.util.Comparator#compare()
javax.servlet.http.HttpServlet
javax.servlet.Filter#doFilter()
Spring框架中的Resourse以及初始化接口InstantiationStrategy

具体实现:

//定义一个策略接口 public interface  tmpStrategy{     void quack(); } 
//定义具体策略方法 //普通鸭子呱呱叫算法 public class IsQuack implements  tmpStrategy{     @Override     public void quack(){         System.out.println("普通鸭子呱呱叫");     } } //橡皮鸭子吱吱叫算法 public class Squeak implements  tmpStrategy{     @Override     public void quack(){         System.out.println("橡皮鸭子吱吱叫");     } } //木头鸭子不会叫算法 public class MuteQuack implements  tmpStrategy{     @Override     public void quack(){         System.out.println("木头鸭子不会叫");     } } 
//客户端调用算法 public class Context {     //注入策略接口以后,才可以选择策略。     private tmpStrategy strategy;      public Context(tmpStrategy strategy){         this.strategy = strategy;     }      public void setQuackBehavior(){         strategy.quack();     }      public static void main(String[] args) {         System.out.println("guagua");         Context context1 = new Context(new IsQuack());         context1.setQuackBehavior();          System.out.println("zhizhi");         Context context2 = new Context(new Squeak());         context2.setQuackBehavior();          System.out.println("nono");         Context context3 = new Context(new MuteQuack());         context3.setQuackBehavior();     } } 

10000Hours资料部分资料来自网络,侵权毕设源码联系删除

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 10000Hours资料

提供最优质的资源集合

立即查看 了解详情