
设计模式
文章平均质量分 95
开发1024
IT从业六载的Java士兵
展开
-
代理模式
文章目录定义类型使用场景优点缺点扩展spring代理选择代理速度对比相关设计模式coding静态代理动态代理源码解析java.lang.reflect.ProxyProxyFactoryBeanJdkDynamicAopProxy、CglibAopProxyMapperProxyFactory定义为其它对象提供一种代理,以控制对这个对象的访问代理对象在客户端和目标对象之间起到中介的作用如何理解呢?就跟我们租房子是一样的,假设我们找中介租房子,租那种全托管的房子,出租出来的房子是房东的,房东是目标原创 2021-01-10 18:28:31 · 404 阅读 · 0 评论 -
结构型-桥接模式
定义将抽象部分与它的具体实现部分分离,使他们都可以独立的变化。通过组合的方式建立两个类之间的联系,而不是继承。类型结构型适用场景抽象和具体实现之间增加更多的灵活性一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立进行扩展不希望使用继承,或因为多层继承导致系统类的个数剧增优点分离抽象部分及其具体实现部分(大白话就是抽象和实现之间不再是继承关系)提供了系统的可扩展性符合开闭原则符合合成复用原则缺点增加了系统的理解和设计难度因为类和类的关系增加了抽象原创 2021-01-10 12:20:47 · 347 阅读 · 0 评论 -
组合模式
定义将对象组合成树形结构以表示“部分-整体”的层次结构。作用组合模式使客户端对单个对象和组合对象保持一致的方式处理类型结构型例子菜单、目录适用场景希望客户端可以忽略组合对象和单个对象的差异时处理一个树形结构时优点清楚地定义分层次的复杂对象,表示对象的全部或部分层次让客户端忽略层次的差异,方便对整个层次结构进行控制简化客户端代码符合开闭原则缺点限制类型时会较为复杂使设计变得更加抽象相关设计模式组合模式和访问者模式coding业务场景:视频网站有很多原创 2020-06-27 20:30:02 · 168 阅读 · 0 评论 -
享元模式
定义提供了 减少对象数量从而改善应用所需的对象结构的 方式。运用共享技术有效地支持大量细粒度的对象类型结构型使用场景常常应用于系统底层的开发,以便解决系统的性能问题。例如:Java中的String模式就是使用了享元模式,String是如果有就返回,如果没有就创建一个String并且保存在String的缓存池里。数据库的连接池,里面都是创建好的连接对象,需要的话直接用,不需要放回去系统有大量相似对象、需要缓存池的场景。优点减少对象的创建,降低内存中对象的数量,降低系原创 2020-06-27 15:22:04 · 292 阅读 · 0 评论 -
适配器模式
定义将一个类的接口转换成客户期望的另一个接口“一个接口”说的是被适配者,而“另一个接口”是目标类定义补充使原本接口不兼容的类可以一起工作类型结构型例如我们的手机的适配器,电脑的电源适配器,都是一个意思。适用场景已存在的类,它的方法和需求不匹配时(方法结果相同或相似)也就是方法的结果相同或相似,在这个基础上出现这种场景时,适配器为了复用一些现有的类,系统的数据和行为都正确,但是接口不符合,这个时候就可以采取适配器模式不是软件设计阶段考虑的设计模式,是随着软件维护,由于不同产品、不同厂家原创 2020-06-26 23:22:44 · 768 阅读 · 0 评论 -
比继承更有弹性的装饰者模式
定义在不改变原有对象的基础上,将功能附加到对象上。提供了比继承更有弹性的替代方案(扩展原有对象功能)类型结构型适用场景装饰者模式在我们生活中也经常会用到,例如我买个蛋糕,我想加些草莓,还想再加些蛋糕,根据不同的需求来装饰这个蛋糕;房子装修也是一样的;还有我们送给朋友礼品,可以选择普通包装、精美包装、包装盒。这些都是装饰者在生活中的使用场景。那在程序中我们可以扩展一个类的功能或...原创 2020-05-13 22:17:46 · 244 阅读 · 0 评论 -
外观模式又叫门面模式?
定义又叫门面模式,提供了一个统一的接口,用来访问系统中的一群接口外观模式定义了一个高层的接口,让子系统更容易使用类型结构型使用场景子系统越来越复杂,增加外观模式提供简单调用接口构建多层系统结构,利用外观对象作为每层的入口,简化层间调用优点简化了调用过程,无须了解深入子系统,防止带来风险减少系统依赖、松散耦合更好的划分访问层次符合迪米特法则,即最少知道原则缺点...原创 2020-05-06 22:08:59 · 199 阅读 · 0 评论 -
六、简单又有坑的原型模式
定义原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。特点不需要知道任何的创建细节,并且不调用构造函数类型创建型适用场景类初始化消耗较多资源一旦我们创建一个类消耗资源过多的时候,并且还要创建大量的资源多的类的对象的时候new产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)数据准备也就是给属性赋值,还有就是关于里面方法访问权限等构造函数比较复杂循环体中生...原创 2020-05-05 18:02:36 · 248 阅读 · 0 评论 -
最简单又最复杂的单例模式
定义保证一个类仅有一个实例,并提供一个全局访问点类型创建型适用场景想确保任何情况下都绝对只有一个实例优点在内存里只有一个实例,减少了内存开销可以避免对资源的多重占用设置了全局访问点,严格控制访问缺点没有接口,扩展困难重点私有构造器这个是为了禁止从单例外部调用构造函数来创建这个对象,为了达到这个目的,必须设置构造函数的权限为private线程安全线程安全在单例模式...原创 2020-05-04 19:58:09 · 1022 阅读 · 0 评论 -
四、建造者模式
定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示用户只需要指定需要建造的类型就可以得到它们,建造过程及细节不需要知道类型创建型使用场景如果一个对象有非常复杂的内部结构(很多属性)想把复杂对象的创建和使用分离优点封装性好,创建和使用分离扩展性好,建造类之间独立,一定程度上解耦缺点产生多余的Builder对象产品内部发生变化,建造者都要修...原创 2019-12-05 18:47:27 · 179 阅读 · 0 评论 -
三、抽象工厂
定义抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口无须指定它们具体的类类型创建型适用场景客户端(应用层)不依赖于产品类实例如何被创建、实现等细节强调一系列相关的产品对象(属于同一产品族)一起使用,创建对象需要大量重复的代码提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体的实现优点具体的产品在应用层代码隔离,无须关心创建细节将一系列的产品族...原创 2019-12-05 16:17:37 · 276 阅读 · 0 评论 -
设计模式-工厂方法
定义定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。创建一个对象常常需要非常复杂的过程,也有可能会导致大量的重复代码,工厂方法模式通过定义一个单独的创建对象的方法来解决这个问题,由子类实现这个方法来创建对象。类型创建型适用场景创建对象需要大量重复代码应用层不依赖于产品类实例如何被创建、实现等细节一个类通过其子类来指定创建哪个...原创 2019-09-25 23:01:13 · 150 阅读 · 0 评论 -
设计模式-简单工厂
文章目录定义适用场景优点缺点coding反射演进简单工厂JDK源码解析Calendarlogback中的LoggerFactory定义由一个工厂对象决定创建出哪一种产品类的实例类型属于创建型,但不属于GOF23种设计模式。抽象工厂和工厂方法都是由简单工厂引申出来的。适用场景工厂类负责创建的对象比较少应用层只知道传入工厂类的参数对于如何创建对象(逻辑)不关心优点只需要传入一个正确...原创 2019-09-25 23:01:23 · 298 阅读 · 0 评论 -
设计原则
文章目录前言开闭原则面向抽象编程coding前言设计原则有开闭原则依赖倒置原则单一职责原则接口隔离原则迪米特法则里氏替换原则合成复用原则每个原则都有自己的焦点,在我们实际开发过程中,讲究的是一个平衡,我们要考虑人力、时间、成本、资量、包括有些项目是有dealline的,还有业务的扩展性。如果一开始把扩展性做的特别特别完美的话,那成本又上来了。所以追寻设计原则也不要过度,在适...原创 2019-09-25 23:00:59 · 346 阅读 · 0 评论