设计模式
NIO4444
这个作者很懒,什么都没留下…
展开
-
设计模式系列: 委派模式(Delegate)模式应用实践
委派模式(Delegate)这种模式的原理为类B和类A是两个互相没有任何关系的类,B具有和A一模一样的方法和属性;并且调用B中的方法,属性就是调用A中同名的方法和属性。B好像就是一个受A授权委托的中介。第三方的代码不需要知道A的存在,也不需要和A发生直接的联系,通过B就可以直接使用A的功能,这样既能够使用到A的各种公能,又能够很好的将A保护起来了。Demo...原创 2020-08-16 18:03:28 · 382 阅读 · 0 评论 -
设计模式系列:装饰者模式和适配器模式对比
装饰者和适配器模式都是包装模式(Wrapper Pattern),装饰者也是一种特殊的代理模式原创 2020-08-16 17:56:59 · 376 阅读 · 0 评论 -
设计模式系列:装饰模式(Decorator)模式应用实践
装饰模式又名包装(Wrapper)模式 [ˈræpə(r)]。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。原创 2020-08-16 17:55:45 · 353 阅读 · 0 评论 -
JAVA系列:代理(Proxy) 源码分析
基础设计模式系列:代理(Proxy)模式应用实践源码分析进入Proxy.newProxyInstance进入getProxyClass0proxyClassCache在哪里设置?原来是一个弱引用。进入ProxyClassFactory关键代码:生成二进制class数据流生成二进制class数据流byte[] proxyClassFile = ProxyGenerator.generateProxyClass( proxyNa...原创 2020-07-19 19:20:28 · 809 阅读 · 0 评论 -
设计模式系列:代理(Proxy)模式应用实践
代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。 代理对象可以在客户端和目标对象之间起到中介的作用 代理对象通常在客户端调用传递给目标对象之前或之后,执行某个操作,而不是单纯地将调用传递给目标对象。静态代理动态代理package com.example.demo.aop;public interface Person { pu...原创 2020-07-19 18:13:24 · 366 阅读 · 0 评论 -
设计模式系列:适配器(Adapter)模式应用实践
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。Demopublicinterface和尚 {publicvoid吃斋();publicvoid念经();publicvoid打坐();publicvoid撞钟();publicvoid习武();publicString getName();}...原创 2020-07-19 12:54:02 · 433 阅读 · 0 评论 -
设计模式系列:6个创建型模式应用实践
创建型模式创建型模式主要关注对象的创建过程,将对象的创建过程进行封装,使客户端可以直接得到对象,而不用去关心如何创建对象。这里共有5种创建型模式:单例模式(Singleton) : 用于得到某类型的唯一对象; 工厂方法模式(Factory Method) : 用于创建复杂对象; 抽象工厂模式(Abstract Factory) : 用于创建一组相关或相互依赖的复杂对象; 建造者模式(Builder) : 用于创建模块化的更加复杂的对象,将该对象的创建过程与其本身的表示或数据结构相分离;...原创 2020-07-13 14:36:27 · 382 阅读 · 0 评论 -
设计模式系列:原型模式(Prototype)应用实践
英[ˈprəʊtətaɪp]原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。这就是原型模式的用意。应用场景原型模式就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节原型模式的结构原型模式要求对象实现一个可以“克隆”自身的接口,这样就可以通过复制一个实例对象本身来创建一个新的实例。这样一来,通过原型实例创建新的对象,就不再需要关心这个实例本身的类型,只要实现了克隆...原创 2020-07-12 22:34:49 · 504 阅读 · 0 评论 -
设计模式系列:建造模式(Builder)应用实践
建造模式是对象的创建模式。建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。使用场景 1. 需要生成的产品对象有复杂的内部结构,每一个内部成分本身可以是对象,也可以仅仅是一个对象(即产品对象)的一个组成部分。 2. 需要生成的产品对象的属性相互依赖。建造模式可以强制实行一种分步骤进行的建造过程,因此,如果产品对象的一个属性必须在另一个属性被赋值之后才可以被赋值,使..原创 2020-07-12 22:21:04 · 592 阅读 · 0 评论 -
设计模式系列:双重检查加锁安全吗?
基础设计模式系列:单例模式(Singleton)应用实践原创 2020-07-12 21:54:38 · 343 阅读 · 0 评论 -
设计模式系列:单例模式(Singleton)应用实践
单例模式多线程单例模式的类,在整个内存中只有一份存在(有且只能一个new,避免功能性冲突)应用场景保证一个类仅有一个实例,并提供一个访问它的全局访问点主要特点实现单例模式三个主要特点:1、构造方法私有化(不能通过new创建很多实例);--构造函数private2、实例化的变量引用私有化(避免线程安全);--private Object instanct ;3、获取实例的方法共有(出口)。 --public Object getInstance();...原创 2020-07-12 21:52:08 · 431 阅读 · 0 评论 -
设计模式系列:抽象工厂模式应用实践
定义抽象工厂模式(Abastract Factory Pattern)是指提供一个创建一系列相关或相互依赖对象的接口,无须指定他们具体的类。客户端(应用层)不依赖于产品类实例如何被创建、实现等细节,强调的是一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码。需要提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现。应用场景 举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选择一系列的...原创 2020-07-12 18:31:00 · 905 阅读 · 0 评论 -
设计模式系列:工厂方法模式应用实践
工厂方法模式是类的创建模式,定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中(让实现这个接口的类来决定实例化哪个类)。使用场景 相信很多人都做过导入导出功能,就拿导出功能来说。有这么一个需求:XX系统需要支持对数据库中的员工薪资进行导出,并且支持多种格式如:HTML、CSV、PDF等,每种格式导出的结构有所不同,比如:财务跟其他人对导出薪资的HTML格式要求可能会不一样,因为财务可能需要特定的格式方便核算或其他用途。 如果使用简单工厂模式,则工厂类必定过于...原创 2020-07-12 17:49:18 · 469 阅读 · 0 评论 -
设计模式系列:简单工厂模式在JDK的应用(源码)
基础设计模式系列:简单(Static Factory Method)工厂模式Calendarpublic class Demo01 { public static void main(String[] args) { Calendar c = Calendar.getInstance(); System.out.printf(" " + c.get(Calendar.YEAR)); System.out.printf(" " + .原创 2020-07-12 15:04:25 · 570 阅读 · 0 评论 -
设计模式系列:简单(Static Factory Method)工厂模式应用实践
简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。使用场景 就拿登录功能来说,假如应用系统需要支持多种登录方式如:口令认证、域认证(口令认证通常是去数据库中验证用户,而域认证则是需要到微软的域中验证用户)。那么自然的做法就是建立一个各种登录方式都适用的接口,如下图所示:还需要一个工厂类LoginManager,根据调用者不同的要求,创建出不同的登录对象并返回。而如果碰..原创 2020-07-12 14:36:31 · 405 阅读 · 0 评论 -
设计模式系列:软件架构设计的七大原则之迪米特法则
不要求所有代码都遵循设计原则,要考虑人力、时间、成本、质量,不刻意追求完美意义提高代码的可读性、可维护性、可复用性。迪米特法则迪米特原则(Law of Demeter LoD)是指一个对象应该对其他对象保持最少的了解,又叫最少知道原则(Least Knowledge Principle,LKP),尽量降低类与类之间的耦合。迪米特原则主要强调只和朋友交流,不和陌生人说话。出现在成员变量、方法的输入、输出参数中的类都可以称之为成员朋友类,而出现在方法体内部的类不属于朋友类。现...原创 2020-07-12 12:14:55 · 346 阅读 · 0 评论 -
设计模式系列:软件架构设计的七大原则之单一职责原则
不要求所有代码都遵循设计原则,要考虑人力、时间、成本、质量,不刻意追求完美意义提高代码的可读性、可维护性、可复用性。单一职责原则单一职责(Simple Responsibility Pinciple,SRP)是指不要存在多于一个导致类变更的原因。假设我们有一个 Class负责两个职责,一旦发生需求变更,修改其中一个职责的逻辑代码,有可能会导致另一个职责的功能发生故障。这样一来,这个 Class存在两个导致类变更的原因。如何解决这个问题呢?我们就要给两个职责分别用两...原创 2020-07-12 12:24:36 · 421 阅读 · 0 评论 -
设计模式系列:软件架构设计的七大原则之里氏替换原则
不要求所有代码都遵循设计原则,要考虑人力、时间、成本、质量,不刻意追求完美意义提高代码的可读性、可维护性、可复用性。里氏替换原则里氏替换原则(Liskov Substitution Principle,LSP)是指如果对每一个类型为 T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。定义看上去还是比较抽象,我们重新理解一下,可以理解为一个软件实...原创 2020-07-12 12:09:29 · 378 阅读 · 0 评论 -
设计模式系列:软件架构设计的七大原则之合成复用原则
不要求所有代码都遵循设计原则,要考虑人力、时间、成本、质量,不刻意追求完美意义提高代码的可读性、可维护性、可复用性。合成复用原则合成复用原则(Composite/Aggregate Reuse Principle,CARP)是指尽量使用对象组合(has-a)/聚合(contanis-a),而不是继承关系达到软件复用的目的。可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少。继承相当于把所有的实现细节暴露给子类。组合/聚合对类以...原创 2020-07-12 11:58:35 · 371 阅读 · 0 评论 -
设计模式系列:软件架构设计的七大原则之接口隔离原则
不要求所有代码都遵循设计原则,要考虑人力、时间、成本、质量,不刻意追求完美意义提高代码的可读性、可维护性、可复用性。接口隔离原则接口隔离原则(Interface Segregation Principle, ISP)是指用多个专门的接口,而不使用单一的总接口,客户端不应该依赖它不需要的接口。这个原则指导我们在设计接口时应当注意一下几点:1、一个类对一类的依赖应该建立在最小的接口之上。2、建立单一接口,不要建立庞大臃肿的接口。3、尽量细化接口,接口中的方法...原创 2020-07-12 11:49:39 · 363 阅读 · 0 评论 -
设计模式系列:软件架构设计的七大原则之依赖倒置原则
不要求所有代码都遵循设计原则,要考虑人力、时间、成本、质量,不刻意追求完美意义提高代码的可读性、可维护性、可复用性。依赖倒置原则依赖倒置原则(Dependence Inversion Principle,DIP)是指设计代码结构时,高层模块不应该依赖底层模块,二者都应该依赖其抽象。抽象不应该依赖细节;细节应该依赖抽象。通过依赖倒置,可以减少类与类之间的耦合性,提高系统的稳定性,提高代码的可读性和可维护性,并能够降低修改程序所造成的风险。接下来看一个案例,还...原创 2020-07-12 11:43:21 · 398 阅读 · 0 评论 -
设计模式系列:软件架构设计的七大原则之开闭原则
不要求所有代码都遵循设计原则,要考虑人力、时间、成本、质量,不刻意追求完美意义提高代码的可读性、可维护性、可复用性。开闭原则开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。以课程体系为例,首先创建一个课程接口ICourse:整个课程生态有Java架构、大数据、人工智能、前端、软件测试等,我们来创建一个 Java 架构课程的类JavaCourse:...原创 2020-07-12 11:43:57 · 330 阅读 · 0 评论 -
设计模式系列:设计模式间关系图
设计模式间关系图原创 2020-07-11 16:30:35 · 701 阅读 · 0 评论 -
设计模式系列:JDK中用到的设计模式
JDK中用到的设计模式装饰模式:java.io单例模式:Runtime类简单工厂模式:Integer.valueOf方法享元模式:String常量池、Integer.valueOf(int i)、Character.valueOf(char c)迭代器模式:Iterator职责链模式:ClassLoader的双亲委派模型解释器模式:正则表达式java.util.regex.Pattern...原创 2020-07-11 16:28:18 · 405 阅读 · 0 评论