设计模式在Spring框架中扮演着至关重要的角色。它们不仅帮助开发者解决常见的设计问题,还使得系统更加灵活和易于维护。在实际开发中,合理地应用这些设计模式可以显著提高代码质量和系统的可扩展性。例如,使用单例模式可以避免重复创建对象带来的性能开销;利用工厂模式可以动态地根据需要创建对象实例;而通过代理模式可以实现对目标对象的透明增强或监控。此外,观察者模式使得组件间的通信变得更加灵活,模板方法模式则简化了某些固定流程中的步骤。策略模式则可以根据不同的需求选择最合适的实现方式。
1. 单例模式 (Singleton Pattern)
描述:
单例模式确保一个类只有一个实例,并提供一个全局访问点。
Spring 中的应用:
ApplicationContext: Spring 的
ApplicationContext
是一个典型的单例模式实现。整个应用程序共享同一个ApplicationContext
实例。Bean Scopes: 默认情况下,Spring 管理的 Bean 是单例的(singleton scope)。
示例:
@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyServiceImpl();}
}
在这个例子中,MyService
的默认作用域是单例的。
2. 工厂模式 (Factory Pattern)
描述:
工厂模式提供了一种创建对象的方式,而无需指定具体的类。
Spring 中的应用:
Bean Factory:
BeanFactory
接口负责管理 Bean 的创建和生命周期。
示例:
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;publicclass FactoryPatternExample {public static void main(String[] args) {BeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml"));MyBean bean = (MyBean) factory.getBean("myBean");bean.display();}
}class MyBean {public void display() {System.out.println("Hello from MyBean!");}
}
“注意:XmlBeanFactory已过时,推荐使用AnnotationConfigApplicationContext或ClassPathXmlApplicationContext。
3. 代理模式 (Proxy Pattern)
描述:
代理模式为另一个对象提供一种代理以控制对这个对象的访问。
Spring 中的应用:
AOP (Aspect-Oriented Programming): 使用代理模式来拦截方法调用,实现横切关注点(如日志记录、事务管理等)。
JDK Dynamic Proxy: 用于实现接口的代理。
CGLIB Proxy: 用于实现类的代理。
示例:
@Aspect
@Component
public class LoggingAspect {@Before("execution(* com.example.service.*.*(..))")public void logMethodCall(JoinPoint joinPoint) {System.out.println("Method called: " + joinPoint.getSignature().getName());}
}
暂时先写这三个设计模式先,就像吃自助餐一样,先来个开胃菜。后面还有Spring框架里的9种设计模式应用,后面有空将会逐步更新!最近工作繁忙,请先关注我的绿色公举号,后续更新会第一时间通知你。
下集预告
下一篇文章将写上Spring框架下面三种设计模式的应用:
4. 观察者模式 (Observer Pattern)
5. 策略模式 (Strategy Pattern)
6. 模板方法模式 (Template Method Pattern)
/// ***你们的关注是我一直写作的动力
System.out.println("请添加我的绿色公主号:");
System.out.println("Java知识日历");