![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 63
设计模式是对代码开发经验的总结
CodingAnHour
明日复明日,明日何其多。我生待明日,万事成蹉跎。
展开
-
设计模式-代理模式(静态代理、动态代理、cglib动态代理)AOP的底层动态代理
代理模式分为静态代理和动态代理,动态代理又分为基于接口实现的动态代理和基于子类实现的动态代理;创建线程的方式之一实现Runnable接口就使用了静态代理模式Spring框架最为重要的AOP的实现是基于动态代理模式Subject:抽象主题角色,抽象主题类可以是抽象类,也可以是接口,是一个最普通的业务类型定义,无特殊要求。RealSubject:具体主题角色,也叫被委托角色、被代理角色。是业务逻辑的具体执行者。Proxy:代理主题角色,也叫委托类、代理类。原创 2022-10-10 22:54:02 · 421 阅读 · 0 评论 -
设计模式-享元模式、享元模式示例
享元模式是运用共享技术有效地最大限度地复用细粒度对象的一种模式。该模式中,以对象的信息状态划分,可以分为内部数据和外部数据。内部数据是对象可以共享出来的信息,这些信息不会随着系统的运行而改变;外部数据则是在不同运行时被标记了不同的值。享元模式一般可以分为三个角色,分别为 Flyweight(抽象享元类)、ConcreteFlyweight(具体享元类)和 FlyweightFactory(享元工厂类)。抽象享元类通常是一个接口或抽象类,向外界提供享元对象的内部数据或外部数据;原创 2022-09-04 13:16:33 · 228 阅读 · 0 评论 -
设计模式-原型模式、原型模式示例
指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。使用这种方式创建新的对象的话,就无需再通过 new 实例化来创建对象了。在创建多个实例时,对创建过程的性能进行调优;相对new来说,clone少了调用构造函数。如果构造函数中存在大量属性初始化或大对象,则使用clone的复制对象的方式性能会好一些。性能提高。逃避构造函数的约束。配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。原创 2022-09-04 12:41:40 · 219 阅读 · 0 评论 -
设计模式-装饰模式(包装模式Wrapper)、装饰模式示例
装饰者模式又名包装模式(Wrapper),是一种对象结构型模式。是一种用于替代继承的技术,他通过一种无需定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系实际就是动态地给一个对象添加一些额外的功能,比生成子类要灵活优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。缺点:多层装饰比较复杂。使用场景: 1、扩展一个类的功能。2、动态增加功能,动态撤销。原创 2022-09-04 00:15:30 · 1481 阅读 · 0 评论 -
设计模式-策略模式、策略示例、策略模式对比工厂模式
策略模式是对算法的封装,是一种行为模式,将每个算法封装到具有共同接口的独立类中,是算法本身和使用算法的客户端分离开,相互独立,从而使得他们可以相互替换。我们真实开发中会有很多这样类似的代码,这些不同的优惠方式,实际就是策略,使用策略模式就可以更优雅的实现代码。策略模式是一种策略一种行为,并不是一层不变的写法,主要内容:抽象策略类,具体策略。,创建具体对象,对象的具体创建和具体客户使用无关。虽然工厂模式与策略模式相似,工厂模式是一种。...原创 2022-09-01 02:30:28 · 133 阅读 · 0 评论 -
设计模式-创建型模式-工厂模式(简单工厂、工厂方法、抽象工厂)
无论是简单工厂模式,工厂方法模式,还是抽象工厂模式,他们都属于工厂模式,在形式和特点上也是极为相似的,他们的最终目的都是为了解耦。在使用时,我们不必去在意这个模式到底工厂方法模式还是抽象工厂模式,因为他们之间的演变常常是令人琢磨不透的。经常你会发现,明明使用的工厂方法模式,当新需求来临,稍加修改,加入了一个新方法后,由于类中的产品构成了不同等级结构中的产品族,它就变成抽象工厂模式了; 而对于抽象工厂模式,当减少一个 方法使的提供的产品不再构成产品族之后,它就演变成了工厂方法模式。原创 2022-03-10 20:30:26 · 249 阅读 · 0 评论 -
设计模式-创建型模式-原型(Prototype)模式及Java中原型模式的更多实现方式
1、前言当需要克隆100个名称为Dolly 年龄 1的羊,以往的写法都是直接new 100个Sheep对象;public class PrototypeDemo { public static void main(String[] args) { // 克隆100个 名称为Dolly 年龄 1; Sheep dolly1 = new Sheep("Dolly", 1); Sheep dolly2 = new Sheep("Dolly", 1);原创 2022-02-27 23:29:01 · 317 阅读 · 0 评论 -
设计模式的原则
单一职责原则一个类应该只做一件事情,职责要单一,一个类的职责过多,就会产生职责耦合,当其中一个职责发生变化的时候,其他的职责就会受到影响。开放-闭合原则软件实体(类、模块、方法)应该开发扩展,关闭修改,对扩展是开放的,对更改是关闭的。我们应该是面向接口/抽象编程,在增加这个系统需求的功能的时候,应该考虑扩展一个抽象的子类,而不是去直接修改以前的代码里氏替换原则凡是能够使用到父类的地方,将其替换成子类,程序也能够正常运行,结果不会发生改变依赖倒置原则高层模块不应该依赖于底层模块,2个都原创 2022-02-21 23:02:03 · 122 阅读 · 0 评论 -
设计模式-创建型模式-单例(Singleton)模式(懒汉模式、饿汉模式、匿名内部类、枚举类)反射及序列化破解
单例的实现主要是通过以下两个步骤将该类的构造方法定义为私有方法,这样其他处的代码就无法通过调用该类的构造方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例;在该类内提供一个静态方法,当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用。场景:很多时候整个应用只能够提供一个全局的对象,为了保证唯一性,这个全局的对象的引用不能再次被更改。比如在某个应用程序中,该服务器的配置信息存放在一个文件中,这些配置数据由原创 2022-02-24 00:01:27 · 359 阅读 · 0 评论