Java中,策略模式和工廠(chǎng)模式是兩種常用的設(shè)計(jì)模式。它們?cè)诤芏鄨?chǎng)景中都非常適用,但是它們的實(shí)現(xiàn)方式和作用有很大的不同。
策略模式
策略模式是一種行為型模式,它定義了一系列可互換的算法,使得算法可以獨(dú)立于使用它的客戶(hù)而變化。策略模式通常涉及以下角色:
- 抽象策略(Strategy):定義策略的接口或抽象類(lèi),并聲明算法的抽象方法。
- 具體策略(ConcreteStrategy):實(shí)現(xiàn)具體算法的類(lèi)。
- 環(huán)境(Context):持有一個(gè)策略類(lèi)的引用,負(fù)責(zé)調(diào)用具體策略進(jìn)行處理。
// 抽象策略 public interface Strategy { void execute(); } // 具體策略1 public class ConcreteStrategy1 implements Strategy { @Override public void execute() { System.out.println("執(zhí)行具體策略1"); } } // 具體策略2 public class ConcreteStrategy2 implements Strategy { @Override public void execute() { System.out.println("執(zhí)行具體策略2"); } } // 環(huán)境類(lèi) public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void executeStrategy() { strategy.execute(); } }
工廠(chǎng)模式
工廠(chǎng)模式是一種創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。它通常涉及以下角色:
- 抽象產(chǎn)品(Product):定義了產(chǎn)品的接口或抽象類(lèi)。
- 具體產(chǎn)品(ConcreteProduct):實(shí)現(xiàn)了抽象產(chǎn)品的具體類(lèi)。
- 工廠(chǎng)(Factory):負(fù)責(zé)創(chuàng)建產(chǎn)品的工廠(chǎng)類(lèi),提供一個(gè)工廠(chǎng)方法用于創(chuàng)建產(chǎn)品。
- 客戶(hù)端(Client):使用工廠(chǎng)方法創(chuàng)建產(chǎn)品的類(lèi)。
// 抽象產(chǎn)品 public interface Product { void use(); } // 具體產(chǎn)品1 public class ConcreteProduct1 implements Product { @Override public void use() { System.out.println("使用具體產(chǎn)品1"); } } // 具體產(chǎn)品2 public class ConcreteProduct2 implements Product { @Override public void use() { System.out.println("使用具體產(chǎn)品2"); } } // 工廠(chǎng)類(lèi) 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; } } // 客戶(hù)端 public class Client { public static void main(String[] args) { Product product1 = Factory.createProduct("1"); Product product2 = Factory.createProduct("2"); product1.use(); product2.use(); } }
策略模式和工廠(chǎng)模式都是常用的設(shè)計(jì)模式,它們各自具有自己的特點(diǎn)和優(yōu)勢(shì)。策略模式通常使用在一組算法可互換的情況下,讓算法可以在運(yùn)行時(shí)動(dòng)態(tài)切換。而工廠(chǎng)模式通常使用在需要?jiǎng)?chuàng)建多個(gè)類(lèi)型的對(duì)象時(shí),將對(duì)象創(chuàng)建的邏輯與客戶(hù)端解耦。