后端与系统架构1507 字
Spring框架用到的设计模式
·全库 364 / 611
《Spring框架用到的设计模式》共 0.2 万字,通篇围绕 权限 展开,归在「后端与系统架构」这一层。
覆盖权限
适合给 AI 系统搭底座、要管得住的人
目录骨架(6 节)
- Spring框架用到的设计模式
- ```java
- public class Singleton {
- //私有构造
- private Singleton(){
- if(singleton == null){
Spring框架作为一个广泛使用的Java企业应用开发框架,使用了许多设计模式来实现其灵活性和扩展性。以下是一些在Spring中常见的设计模式:
- 单例模式(Singleton Pattern): Spring默认情况下,Bean是单例的。也就是说,Spring容器会确保每个Bean只有一个实例,该实例在整个应用中会被共享使用。
package com.tuling.interview.Spring框架用到的设计模式.单例模式;
public class Singleton {
private volatile static Singleton singleton = null;
//私有构造
private Singleton(){
}
public static Singleton getSingleton(){
if(singleton == null){
synchronized (Singleton.class){
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
2.工厂模式(Factory Pattern): Spring中的BeanFactory和ApplicationContext是工厂模式的典型例子,它们用于创建和管理Bean的实例。
package com.tuling.interview.Spring框架用到的设计模式.工厂模式;
public class Factory {
public static void main(String[] args) {
ProductFactory productFactory = new ProductFactory();
// 创建 ProductA 对象
Product productA = productFactory.createProduct("A");
productA.create();
// 创建 ProductB 对象
Product productB = productFactory.createProduct("B");
productB.create();
}
}
// 定义产品接口
interface Product {
void create();
}
// 实现类 ProductA
class ProductA implements Product {
@Override
public void create() {
System.out.println("ProductA is created.");
}
}
// 实现类 ProductB
class ProductB implements Product {
@Override
public void create() {
System.out.println("ProductB is created.");
}
}
class ProductFactory {
// 工厂方法,根据参数类型创建具体的产品对象
public Product createProduct(String type) {
if (type.equalsIgnoreCase("A")) {
return new ProductA();
} else if (type.equalsIgnoreCase("B")) {
return new ProductB();
}
// 可以返回 null 或者抛出异常
return null;
}
}
3.代理模式(Proxy Pattern): Spring AOP(面向切面编程)大量使用了代理模式。当你配置一个切面(Aspect)时,Spring会创建目标对象的代理来拦截方法调用,并在方法执行前后插入额外的行为。
/**
* 上面的代码展示了如何通过代理模式实现对对象的访问控制(权限验证)
*/
public class Client {
public static void main(String[] args) {
Proxy proxy = new Proxy("User");
proxy.request(); // 输出:抱歉,你没有权限!
Proxy adminProxy = new Proxy("Admin");
adminProxy.request(); // 输出:得到请求的权限!
}
}
// Subject接口
interface Subject {
void request();
}
// RealSubject类
class RealSubject implements Subject {
public void request() {
System.out.println("得到请求的权限!");
}
}
// Proxy类
class Proxy implements Subject {
private RealSubject realSubject;
private String userRole;
public Proxy(String userRole) {
this.userRole = userRole;
}
public void request() {
// 进行权限检查
if (this.userRole.equals("Admin")) {
if (realSubject == null) {
realSubject = new RealSubject();
}
realSubject.request();
} else {
System.out.println("抱歉,你没有权限!");
}
}
}