当前位置: 首页 > wzjs >正文

室内设计师找图片的网站免费主页空间申请

室内设计师找图片的网站,免费主页空间申请,扬州seo推广,电影网站标题怎么做流量多文章目录 设计模型概念单例模式工厂模式策略模式责任链模式 设计模型概念 设计模式是前人总结的软件设计经验和解决问题的最佳方案,它们为我们提供了一套可复用、易维护、可扩展的设计思路。 (1)定义: 设计模式是一套经过验证的…

文章目录

  • 设计模型概念
  • 单例模式
  • 工厂模式
  • 策略模式
  • 责任链模式


设计模型概念

设计模式是前人总结的软件设计经验和解决问题的最佳方案,它们为我们提供了一套可复用、易维护、可扩展的设计思路。

(1)定义: 设计模式是一套经过验证的解决特定设计问题的模板,这些模板并不是代码,而是对类、对象以及它们之间如何协作的抽象描述。

(2)目的: 降低系统的耦合性、提高代码的复用性和可维护性,以及应对不断变化的需求。

(3)设计模式主要可以分为三大类:创建型、结构型和行为型。以下是一些在 JAVA 开发工程师面试中常见的设计模式:

1. 创建型模式

  • 单例模式(Singleton Pattern)
    • 定义: 确保一个类只有一个实例,并提供一个全局访问点。
    • 使用场景: 当系统中需要唯一一个对象来协调各部分工作,如配置管理、线程池、日志对象等。
  • 工厂模式(Factory Pattern)
    • 定义: 定义一个用于创建对象的接口,由子类决定实例化哪一个类。
    • 使用场景: 当系统中有大量对象创建需求,且对象之间具有共同接口或父类时,可以使用工厂模式封装对象的创建逻辑,降低耦合。
  • 建造者模式(Builder Pattern)
    • 定义: 将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。
    • 使用场景: 当一个对象的构造过程复杂,涉及多个步骤或多个可选参数时,使用建造者模式能让代码更清晰、更易扩展。

2. 结构型模式

  • 适配器模式(Adapter Pattern)
    • 定义: 将一个类的接口转换成客户期望的另一个接口,使得原本因接口不兼容而不能一起工作的类可以协同工作。
    • 使用场景: 当你想要使用一些现有的类,但它们的接口与当前系统不匹配时,可以使用适配器模式。
  • 装饰器模式(Decorator Pattern)
    • 定义: 动态地给一个对象添加一些额外的职责,而不影响其他对象。
    • 使用场景: 当系统需要在不改变原有对象结构的情况下增加功能时,装饰器模式提供了一种灵活的解决方案。
  • 外观模式(Facade Pattern)
    • 定义: 为复杂的子系统提供一个简单的接口,使得客户端可以更容易地使用子系统。
    • 使用场景: 当系统中存在多个相互依赖的类或接口时,通过外观模式可以将复杂性隐藏起来,提供一个统一的接口。

3. 行为型模式

  • 观察者模式(Observer Pattern)
    • 定义: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,其相关依赖对象会收到通知并自动更新。
    • 使用场景: 当一个对象状态的变化需要通知其他对象,且不知道这些对象的数量或具体类型时,可以使用观察者模式,如事件监听机制。
  • 策略模式(Strategy Pattern)
    • 定义: 定义一系列算法,把它们一个个封装起来,并使它们可以互换。
    • 使用场景: 当系统中存在多种算法或行为,并且需要根据具体情况选择不同的算法时,策略模式能使算法切换更为灵活。
  • 模板方法模式(Template Method Pattern)
    • 定义: 在一个方法中定义一个算法的骨架,将某些步骤延迟到子类中实现,从而使子类可以不改变算法结构的情况下重新定义算法的某些步骤。
    • 使用场景: 当多个子类有很多相同的行为,只在细节上略有不同的情况下,模板方法模式可以复用公共代码,同时让子类实现具体差异部分。
  • 代理模式(Proxy Pattern)
    • 定义: 为其他对象提供一种代理以控制对这个对象的访问。
    • 使用场景: 当你需要在访问对象时附加一些额外操作(如懒加载、安全控制、缓存等)时,可以使用代理模式来控制对象的访问。

单例模式

确保一个类只有一个实例,并提供一个全局访问点。
Spring 框架中,默认 bean 的作用域为单例(singleton),即在整个应用上下文中只存在一个实例。
如 Spring 的 ApplicationContext 在加载 bean 时会确保同一个 bean 只被实例化一次(除非配置为其他作用域)。

public class Singleton {// 饿汉式单例private static volatile Singleton instance = null;// 私有构造方法,防止外部实例化private Singleton() {}public static Singleton getInstance() {if (instance == null) {sychronized(Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

工厂模式

定义一个用于创建对象的接口,由子类决定实例化哪一个类。
Spring 的 BeanFactoryApplicationContext 实际上就是一个工厂,通过配置文件或注解来实例化并管理对象。

FactoryBean 接口允许开发者自定义 bean 的创建逻辑。

// 定义产品接口
public interface Product {void use();
}// 具体产品A
public class ConcreteProductA implements Product {@Overridepublic void use() {System.out.println("使用产品A");}
}// 具体产品B
public class ConcreteProductB implements Product {@Overridepublic void use() {System.out.println("使用产品B");}
}// 工厂类
public class ProductFactory {public static Product createProduct(String type) {if ("A".equals(type)) {return new ConcreteProductA();} else if ("B".equals(type)) {return new ConcreteProductB();}throw new IllegalArgumentException("未知产品类型:" + type);}
}// 测试入口
public class FactoryDemo {public static void main(String[] args) {Product productA = ProductFactory.createProduct("A");productA.use();Product productB = ProductFactory.createProduct("B");productB.use();}
}

策略模式

定义一系列算法,把它们一个个封装起来,并使它们可以互换。
当系统中有多种算法或行为需要在运行时动态切换时,可以使用策略模式。

Spring MVC 中,通过 HandlerAdapter 接口支持多种类型的控制器(如 @Controller@RestController 等),根据实际请求选择合适的适配器来处理业务逻辑。
事务管理、缓存策略等也采用了类似思想,通过接口和多种实现来动态选择行为。

// 策略接口
public interface Strategy {void execute();
}// 具体策略A
public class ConcreteStrategyA implements Strategy {@Overridepublic void execute() {System.out.println("执行策略A");}
}// 具体策略B
public class ConcreteStrategyB implements Strategy {@Overridepublic void execute() {System.out.println("执行策略B");}
}// 上下文,使用策略
public class Context {private Strategy strategy;public Context(Strategy strategy) {this.strategy = strategy;}public void executeStrategy() {strategy.execute();}
}// 测试入口
public class StrategyDemo {public static void main(String[] args) {Context contextA = new Context(new ConcreteStrategyA());contextA.executeStrategy();Context contextB = new Context(new ConcreteStrategyB());contextB.executeStrategy();}
}

责任链模式

将请求的处理对象连成一条链,每个处理者持有对下一个处理者的引用,按顺序处理请求或将其传递给下一个处理者。
当一个请求可能由多个对象处理,但不清楚到底由哪一个对象处理时,可采用责任链模式进行动态分派。

在 Spring Security 中,FilterChainProxy 维护了一系列过滤器(Filter),每个过滤器依次处理 HTTP 请求,决定是否放行、拒绝或进一步处理。

Spring MVC 中的拦截器链(HandlerInterceptor)也是一个责任链,每个拦截器按顺序处理请求的预处理和后处理工作。

// 责任链中的抽象处理者
public abstract class Handler {protected Handler next;// 设置下一个处理者public void setNext(Handler next) {this.next = next;}// 处理请求public abstract void handleRequest(String request);
}// 具体处理者A
public class ConcreteHandlerA extends Handler {@Overridepublic void handleRequest(String request) {if (request.contains("A")) {System.out.println("ConcreteHandlerA 处理请求: " + request);} else if (next != null) {next.handleRequest(request);}}
}// 具体处理者B
public class ConcreteHandlerB extends Handler {@Overridepublic void handleRequest(String request) {if (request.contains("B")) {System.out.println("ConcreteHandlerB 处理请求: " + request);} else if (next != null) {next.handleRequest(request);}}
}// 测试责任链模式
public class ChainDemo {public static void main(String[] args) {Handler handlerA = new ConcreteHandlerA();Handler handlerB = new ConcreteHandlerB();// 设置责任链顺序handlerA.setNext(handlerB);// 测试请求:包含 "B" 的请求由 ConcreteHandlerB 处理handlerA.handleRequest("Request with B");// 测试请求:包含 "A" 的请求由 ConcreteHandlerA 处理handlerA.handleRequest("Request with A");}
}


文章转载自:

http://eXAJliTl.dhwyL.cn
http://RY323Xaw.dhwyL.cn
http://tOqkrEb9.dhwyL.cn
http://GD7BmEHP.dhwyL.cn
http://gJNvL874.dhwyL.cn
http://YbAfvLWf.dhwyL.cn
http://QXiVsnUS.dhwyL.cn
http://0CnLwBvg.dhwyL.cn
http://2W2CjSs8.dhwyL.cn
http://FFv7dAYC.dhwyL.cn
http://8iD6E0NN.dhwyL.cn
http://6PG1AGiT.dhwyL.cn
http://6Fmv7ExH.dhwyL.cn
http://QtUVwpqJ.dhwyL.cn
http://DJPGGLDG.dhwyL.cn
http://iQmAmRtS.dhwyL.cn
http://3sEnoNCj.dhwyL.cn
http://MkcSnOX6.dhwyL.cn
http://O9lERAlH.dhwyL.cn
http://OoPwnkLY.dhwyL.cn
http://M10EY44k.dhwyL.cn
http://cnPanCjC.dhwyL.cn
http://lNjfGiCk.dhwyL.cn
http://Pg1D9aZn.dhwyL.cn
http://Bu00Rb92.dhwyL.cn
http://a50R8r5b.dhwyL.cn
http://OfY0s2bZ.dhwyL.cn
http://r8FQ0lCr.dhwyL.cn
http://7POhUT1d.dhwyL.cn
http://Y2sNA7Zw.dhwyL.cn
http://www.dtcms.com/wzjs/600915.html

相关文章:

  • 网站设计服务费英文兰州网站seo技术厂家
  • 做窗帘网站图片wordpress文章浏览统计
  • 宣城网站seo外贸网站个人简介
  • 网站开发计划和预算php网站开发需要多久
  • 企业建设网站的资金策划做导航网站用什么cms
  • 售后服务 网站建设招商页面设计
  • c#网站开发框架合肥住房和城乡建设局
  • 网站建设合作分成合同网络规划设计师下午题2023估分
  • 建立一个网站需要多少钱萍乡的电子商务网站建设公司
  • 从那些方面建设网站欧美在线做视频网站
  • 什么是网站死链邹城网页设计
  • 什么是平台内部营销seo建站是什么意思
  • 科技馆网站建设方案自己如何建立网站
  • 安宁市建设厅网站郑州网站制作报价
  • 快速制作app软件关键词排名优化官网
  • 江津网站建设效果好不好360网站开发
  • 广西网站建设营销公司360网站做推广
  • 万网云服务器怎么上传网站长江证券官方网站下载
  • 朝阳周边网站建设西安建设网站电话号码
  • 企业网站制作的书怎么做卖花的网站
  • 广州从化网站建设地方网站定位
  • 网站开发与建设方向高端网站建设与发展
  • 网站框架是怎么做的asp.net 价格查询网站
  • 晋江网站建设企业d网站建设的目的
  • 做网站多少钱赚钱吗wordpress忘记账户
  • 中国老区建设促进会网站学院网站设计流程
  • asp.net mvc 手机网站最新新闻热点事件2024年
  • 传统建筑网站建立网站的步骤有哪些
  • 到国外网站上做兼职翻译大芬地铁站附近做网站
  • 做网站主要学什么软件网络营销的内容主要包括哪些方面