編程語言 php java

java設計模式-策略模式Strategy

java HTML我幫您 1年前  5899次瀏覽
1、什么是策略模式?
策略模式是對算法的包裝,是把使用算法的責任和算法本身分割開來,委派給不同的對象管理。策略模式通常把一個系列的算法包裝到一系列的策略類里面,作為一個抽象策略類的子類。一句話形容就是:準備一組算法,并將每一個算法封裝起來,似的他們可以互換。策略模式似的算法可以獨立于使用他的客戶而變化。

2、策略模式有什么好處?
策略模式的好處在于你可以動態的改變對象的行為。

3、使用場景
許多相關的類僅僅是行為有異。“策略”提供了一種多個行為中的一個行為來配置一個類的方法。
需要使用一個算法的不同變體。例如,你可能會定義一些反應不同的空間/時間權衡的算法。當這些變體實現為一個算法的類層時,可以使用策略模式。
算法是用戶不應該知道的數據。可使用策略模式以避免暴露復雜的、與算法相關的數據結構。
一個類定義了多種行為,并且這些行為在這個類的操作中以多個條件語句的形式出現。將相關的條件分支一如他們各自的Strategy類中以代替這些條件語句。。


4、策略模式中有三個角色:
環境角色:該類中實現了對抽象策略中定義的接口或者抽象類的引用。
抽象策略角色:它可由接口或抽象類來實現。
具體策略角色:它封裝了實現同不功能的不同算法。

利用策略模式構建應用程序,可以根據用戶配置等內容,選擇不同有算法來實現應用程序的功能。具體的選擇有環境對象來完成。采用這種方式可以避免由于使用條件語句而帶來的代碼混亂,提高應用程序的靈活性與條理性。

舉例
17
package com.html580.strategy;

interface Strategy {
public int calculator(int num1, int num2);
}

class Add implements Strategy {

public int calculator(int num1, int num2) {
return num1 + num2;
}
}
class Plus implements Strategy {

public int calculator(int num1, int num2) {
return num1 - num2;
}
}
class Multiply implements Strategy {

public int calculator(int num1, int num2) {
return num1 * num2;
}
}

class Context {
private Strategy strategy;

public Context(Strategy strategy) {
this.strategy = strategy;
}

public int calculator(int num1, int num2) {
return strategy.calculator(num1, num2);
}
}

class Substract implements Strategy {

public int calculator(int num1, int num2) {
return num1 - num2;
}
}

public class Client {

public static void main(String<> args) {
Context context = new Context(new Add());
System.out.println("10 + 5 = " + context.calculator(10, 5));
context = new Context(new Substract());
System.out.println("10 - 5 = " + context.calculator(10, 5));
context = new Context(new Multiply());
System.out.println("10 * 5 = " + context.calculator(10, 5));
}
}




發表評論

腾讯彩票兑奖