Java是一種常見的編程語言,被廣泛應用于各種類型的軟件開發中。策略模式和工廠模式是Java中兩種常見的設計模式,它們都可以幫助開發人員簡化程序的開發過程,提高代碼的可維護性和可擴展性。
策略模式是一種行為型設計模式,它允許在運行時根據不同的情況選擇不同的算法來解決一個問題。在策略模式中,我們定義一系列的算法(策略),并將它們封裝在一個類里。然后我們可以在需要使用這些算法的時候,動態地選擇一個算法來執行。
public interface Strategy { public void executeStrategy(); } public class ConcreteStrategy1 implements Strategy { public void executeStrategy() { System.out.println("Executing strategy 1"); } } public class ConcreteStrategy2 implements Strategy { public void executeStrategy() { System.out.println("Executing strategy 2"); } } public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void executeStrategy() { strategy.executeStrategy(); } } public class Main { public static void main(String[] args) { Context context = new Context(new ConcreteStrategy1()); context.executeStrategy(); context = new Context(new ConcreteStrategy2()); context.executeStrategy(); } }
上面的代碼展示了一個簡單的策略模式的例子。其中,接口Strategy定義了所有算法的執行方法。ConcreteStrategy1和ConcreteStrategy2是兩個實現了Strategy接口的具體算法。Context是一個使用策略的類,它在構造函數中接收一個策略對象,并在需要的時候調用策略對象的executeStrategy方法。
工廠模式是一個創建型設計模式,它用于創建一系列相關的對象,而無需指定它們的具體類。在工廠模式中,我們定義一個工廠類,用于創建特定類型的對象。我們可以在客戶端代碼中使用工廠類來創建對象,而無需指定任何具體的類名。
public interface Animal { public void makeSound(); } public class Dog implements Animal { public void makeSound() { System.out.println("Woof!"); } } public class Cat implements Animal { public void makeSound() { System.out.println("Meow!"); } } public class AnimalFactory { public Animal createAnimal(String type) { if (type.equals("Dog")) { return new Dog(); } else if (type.equals("Cat")) { return new Cat(); } else { return null; } } } public class Main { public static void main(String[] args) { AnimalFactory factory = new AnimalFactory(); Animal dog = factory.createAnimal("Dog"); Animal cat = factory.createAnimal("Cat"); System.out.println("Dog says:"); dog.makeSound(); System.out.println("Cat says:"); cat.makeSound(); } }
上面的代碼展示了一個簡單的工廠模式的例子。其中,接口Animal定義了所有動物的行為。Dog和Cat是兩個實現了Animal接口的具體動物類。AnimalFactory是一個用于創建動物對象的工廠類,它根據輸入的類型參數來創建特定類型的對象。客戶端代碼中,我們可以通過調用工廠類的createAnimal方法來創建對象,并調用對應對象的makeSound方法。