Java中,策略模式和工廠模式是兩種常用的設計模式。它們在很多場景中都非常適用,但是它們的實現方式和作用有很大的不同。
策略模式
策略模式是一種行為型模式,它定義了一系列可互換的算法,使得算法可以獨立于使用它的客戶而變化。策略模式通常涉及以下角色:
- 抽象策略(Strategy):定義策略的接口或抽象類,并聲明算法的抽象方法。
- 具體策略(ConcreteStrategy):實現具體算法的類。
- 環境(Context):持有一個策略類的引用,負責調用具體策略進行處理。
// 抽象策略 public interface Strategy { void execute(); } // 具體策略1 public class ConcreteStrategy1 implements Strategy { @Override public void execute() { System.out.println("執行具體策略1"); } } // 具體策略2 public class ConcreteStrategy2 implements Strategy { @Override public void execute() { System.out.println("執行具體策略2"); } } // 環境類 public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void executeStrategy() { strategy.execute(); } }
工廠模式
工廠模式是一種創建型模式,它提供了一種創建對象的最佳方式。它通常涉及以下角色:
- 抽象產品(Product):定義了產品的接口或抽象類。
- 具體產品(ConcreteProduct):實現了抽象產品的具體類。
- 工廠(Factory):負責創建產品的工廠類,提供一個工廠方法用于創建產品。
- 客戶端(Client):使用工廠方法創建產品的類。
// 抽象產品 public interface Product { void use(); } // 具體產品1 public class ConcreteProduct1 implements Product { @Override public void use() { System.out.println("使用具體產品1"); } } // 具體產品2 public class ConcreteProduct2 implements Product { @Override public void use() { System.out.println("使用具體產品2"); } } // 工廠類 public class Factory { public static Product createProduct(String type) { if (type.equals("1")) { return new ConcreteProduct1(); } else if (type.equals("2")) { return new ConcreteProduct2(); } return null; } } // 客戶端 public class Client { public static void main(String[] args) { Product product1 = Factory.createProduct("1"); Product product2 = Factory.createProduct("2"); product1.use(); product2.use(); } }
策略模式和工廠模式都是常用的設計模式,它們各自具有自己的特點和優勢。策略模式通常使用在一組算法可互換的情況下,讓算法可以在運行時動態切換。而工廠模式通常使用在需要創建多個類型的對象時,將對象創建的邏輯與客戶端解耦。