设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列
设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点
设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式,每一种模式的概念、使用场景和优缺点。
设计模式之模板方法模式,通俗易懂快速理解,以及模板方法模式的使用场景
设计模式之-建造者模式通俗易懂理解,以及建造者模式的使用场景和示列代码
设计模式之-代理模式,快速掌握理解代理模式,以及代理模式的使用场景
设计模式之-原型模式,快速掌握原型模式,通俗易懂的理解原型模式以及使用场景
设计模式之-中介者模式,快速掌握中介者模式,通俗易懂的讲解中介者模式以及它的使用场景
设计模式之-责任链模式,快速掌握责任链模式,通俗易懂的讲解责任链模式以及它的使用场景
设计模式之-装饰模式,快速掌握装饰模式,通俗易懂的讲解装饰模式以及它的使用场景
设计模式之-适配器模式,快速掌握适配器模式,通俗易懂的讲解适配器模式以及它的使用场景
策略模式是一种行为型设计模式,它定义了一系列的算法,并将每个算法封装到独立的策略类中,使它们可以相互替换。策略模式使算法的变化独立于使用算法的客户端。
在现实生活中,策略模式的例子可以是支付方式的选择。当用户进行支付时,可以根据具体的支付方式选择不同的策略,如现金支付、信用卡支付或支付宝支付。这些支付方式都是不同的算法,但用户不需要关心具体的实现细节,只需要选择合适的支付方式。
下面是一个通俗易懂的策略模式示例代码,以动物叫声为场景:
// 抽象策略:叫声策略
interface SoundStrategy {
void makeSound();
}
// 具体策略:狗叫声
class DogSoundStrategy implements SoundStrategy {
@Override
public void makeSound() {
System.out.println("汪汪汪!");
}
}
// 具体策略:猫叫声
class CatSoundStrategy implements SoundStrategy {
@Override
public void makeSound() {
System.out.println("喵喵喵!");
}
}
// 环境类:动物
class Animal {
private SoundStrategy soundStrategy;
public void setSoundStrategy(SoundStrategy soundStrategy) {
this.soundStrategy = soundStrategy;
}
public void makeSound() {
soundStrategy.makeSound();
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
Animal dog = new Animal();
dog.setSoundStrategy(new DogSoundStrategy());
dog.makeSound(); // 汪汪汪!
Animal cat = new Animal();
cat.setSoundStrategy(new CatSoundStrategy());
cat.makeSound(); // 喵喵喵!
}
}
在上面的示例中,SoundStrategy是抽象策略,定义了叫声策略的方法。DogSoundStrategy和CatSoundStrategy是具体策略,分别实现了叫声策略的方法。
Animal是环境类,持有一个叫声策略的引用。通过调用环境类的makeSound方法,可以根据设置的叫声策略来发出不同的叫声。
在客户端代码中,首先创建了一个狗对象dog,并设置了狗叫声的策略。然后调用狗对象的makeSound方法,输出狗的叫声。接着创建了一个猫对象cat,并设置了猫叫声的策略,再调用猫对象的makeSound方法,输出猫的叫声。
通过使用策略模式,可以根据不同的情况选择不同的策略,而不需要改变环境类的代码。策略模式将算法的变化独立于客户端,使代码更加灵活和可扩展。