色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java策略模式和模板方法模式

鄭雨菲1年前7瀏覽0評論

Java中有很多種設(shè)計模式,其中策略模式和模板方法模式是比較常用的兩種。它們分別解決了不同的設(shè)計問題,下面我們分別來介紹一下。

1. 策略模式

策略模式是指定義一系列的算法,把它們一個個封裝起來,并且使它們可以相互替換。策略模式使得算法可以獨立于使用它的客戶端而變化。

下面是一個簡單的示例代碼:

// 策略接口
public interface Strategy {
void execute();
}
// 具體策略實現(xiàn)類
public class ConcreteStrategyA implements Strategy{
@Override
public void execute() {
System.out.println("這是策略A的實現(xiàn)方法");
}
}
public class ConcreteStrategyB implements Strategy{
@Override
public void execute() {
System.out.println("這是策略B的實現(xiàn)方法");
}
}
// 上下文類
public class Context {
private Strategy strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void executeStrategy() {
if(strategy != null) {
strategy.execute();
}
}
}
// 客戶端代碼
public class Client {
public static void main(String[] args) {
Context context = new Context();
context.setStrategy(new ConcreteStrategyA());
context.executeStrategy();
context.setStrategy(new ConcreteStrategyB());
context.executeStrategy();
}
}

上面的代碼中,定義了一個策略接口和兩個具體的策略實現(xiàn)類,上下文類中維護了一個策略對象并且提供了執(zhí)行策略的方法。使用策略模式的好處是可以方便地擴展新的策略實現(xiàn)類而不需要修改原有的代碼。

2. 模板方法模式

模板方法模式是指在一個抽象類中定義一個算法的骨架,將一些步驟延遲到子類中實現(xiàn)。模板方法模式使得子類可以不改變算法結(jié)構(gòu)的情況下重新定義算法的某些步驟。

下面是一個簡單的代碼示例:

// 抽象類
public abstract class AbstractClass {
public final void templateMethod() {
// 執(zhí)行算法骨架
specificMethod();
abstractMethod1();
abstractMethod2();
hookMethod();
}
public void specificMethod() {
System.out.println("抽象類中的具體方法被調(diào)用了...");
}
public abstract void abstractMethod1();
public abstract void abstractMethod2();
public void hookMethod() {}
}
// 具體子類
public class ConcreteClassA extends AbstractClass {
@Override
public void abstractMethod1() {
System.out.println("A類實現(xiàn)了抽象方法1");
}
@Override
public void abstractMethod2() {
System.out.println("A類實現(xiàn)了抽象方法2");
}
}
public class ConcreteClassB extends AbstractClass {
@Override
public void abstractMethod1() {
System.out.println("B類實現(xiàn)了抽象方法1");
}
@Override
public void abstractMethod2() {
System.out.println("B類實現(xiàn)了抽象方法2");
}
@Override
public void hookMethod() {
System.out.println("B類重寫了鉤子方法");
}
}
// 客戶端代碼
public class Client {
public static void main(String[] args) {
AbstractClass classA = new ConcreteClassA();
classA.templateMethod();
System.out.println("----------------------");
AbstractClass classB = new ConcreteClassB();
classB.templateMethod();
}
}

上面的代碼中,抽象類中定義了一個模板方法,該方法定義了一個算法的骨架,具體的步驟在抽象方法中實現(xiàn),其中有一個可選的鉤子方法,可以在子類中進行重寫。具體子類只需要實現(xiàn)抽象方法即可。

使用模板方法模式的好處在于可以避免代碼的重復(fù),將算法實現(xiàn)和框架分離開來,提高代碼的可維護性。