龙川县建设网站,asp做网站优点,网站微博代码,电源网站模版在Java中#xff0c;设计模式是用于解决特定上下文中常见问题的最佳实践解决方案#xff0c;广泛用于编写易于维护、扩展和理解的代码。这里我将介绍六种常用的设计模式及其对应的设计原则#xff1a;
1. 单例模式 (Singleton)
设计原则: 确保一个类只有一个实例#xff…在Java中设计模式是用于解决特定上下文中常见问题的最佳实践解决方案广泛用于编写易于维护、扩展和理解的代码。这里我将介绍六种常用的设计模式及其对应的设计原则
1. 单例模式 (Singleton)
设计原则: 确保一个类只有一个实例并提供全局访问点。
应用场景: 当你需要确保系统中只有一个全局对象如配置对象、连接池等时使用。
示例代码:
public class Singleton {private static Singleton instance;private Singleton() {}public static synchronized Singleton getInstance() {if (instance null) {instance new Singleton();}return instance;}
}2. 工厂方法模式 (Factory Method)
设计原则: 定义一个用于创建对象的接口让子类决定实例化哪一个类。
应用场景: 当创建逻辑变得复杂或者客户端代码需要与产品对象解耦时使用。
示例代码:
public interface Product {void use();
}public class ConcreteProductA implements Product {public void use() {System.out.println(Product A used.);}
}public class ConcreteProductB implements Product {public void use() {System.out.println(Product B used.);}
}public abstract class Creator {public abstract Product factoryMethod();
}public class ConcreteCreatorA extends Creator {Overridepublic Product factoryMethod() {return new ConcreteProductA();}
}public class ConcreteCreatorB extends Creator {Overridepublic Product factoryMethod() {return new ConcreteProductB();}
}3. 观察者模式 (Observer)
设计原则: 定义对象间的一种一对多的依赖关系当一个对象的状态改变时所有依赖于它的对象都会被自动通知和更新。
应用场景: 当你希望在系统中建立一个触发机制比如用户操作触发某些响应或报告生成等。
示例代码:
import java.util.ArrayList;
import java.util.List;public interface Observer {void update();
}public class ConcreteObserver implements Observer {public void update() {System.out.println(Observer has been updated.);}
}public class Subject {private ListObserver observers new ArrayList();public void addObserver(Observer observer) {observers.add(observer);}public void removeObserver(Observer observer) {observers.remove(observer);}public void notifyObservers() {for (Observer observer : observers) {observer.update();}}
}4. 装饰者模式 (Decorator)
设计原则: 对象应对扩展开放但对修改关闭。动态地将责任附加到对象上。若要扩展功能装饰者提供了比继承更有弹性的替代方案。
应用场景: 当你需要给类添加额外功能时并希望在运行时动态地添加这些功能。
示例代码:
public interface Component {void operation();
}public class ConcreteComponent implements Component {public void operation() {System.out.println(Concrete Component operation.);}
}public abstract class Decorator implements Component {protected Component wrappedComponent;public Decorator(Component comp) {this.wrappedComponent comp;}public void operation() {wrappedComponent.operation();}
}public class ConcreteDecoratorA extends Decorator {public ConcreteDecoratorA(Component comp) {super(comp);}public void operation() {super.operation();addedBehavior();}private void addedBehavior() {System.out.println(Concrete Decorator A behavior.);}
}5. 策略模式 (Strategy)
设计原则: 定义算法家族分别封装起来让它们之间可以互相替换此模式让算法的变化独立于使用算法的客户。
应用场景: 当你有多种类的算法或业务规则并且这些算法需要在运行时根据不同情况动态更换时使用。
示例代码:
public interface Strategy {void execute();
}public class ConcreteStrategyA implements Strategy {public void execute() {System.out.println(Executing strategy A.);}
}public class ConcreteStrategyB implements Strategy {public void execute() {System.out.println(Executing strategy B.);}
}public class Context {private Strategy strategy;public Context(Strategy strategy) {this.strategy strategy;}public void setStrategy(Strategy strategy) {this.strategy strategy;}public void executeStrategy() {strategy.execute();}
}使用策略模式可以方便地更改Context类实例的行为通过为其设置不同的Strategy实现。
6. 适配器模式 (Adapter)
设计原则: 将一个类的接口转换成客户期望的另一个接口。适配器让原本由于接口不兼容而不能一起工作的那些类可以一起工作。
应用场景: 当你希望使用一个已存在的类但其接口并不符合你的需求时你可以创建一个适配器类来间接地适配其接口。
示例代码:
// 目标接口
public interface Target {void request();
}// 需要被适配的类
public class Adaptee {public void specificRequest() {System.out.println(Specific request.);}
}// 适配器
public class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee adaptee;}Overridepublic void request() {adaptee.specificRequest();}
}通过适配器模式我们可以使原本因接口不兼容而无法一起工作的类可以一起工作。这种模式通过适配器类Adapter将Adaptee类的接口转换为目标接口Target所期望的形式。
总结
这六种设计模式是Java中常用的模式通过应用这些模式可以提升代码的可维护性、扩展性和灵活性。设计模式遵循的设计原则如开闭原则开放扩展关闭修改、单一职责原则、依赖倒置原则等都是在软件工程中保持代码健康的重要指导原则。掌握并应用这些设计模式和原则有助于成为一名更优秀的软件工程师。