设计模式
文章平均质量分 68
设计模式的学习与总结
圣斗士Morty
Java开发者,技术学习爱好者,费曼技巧学习法践行者
展开
-
Java常用设计模式——观察者模式
一、行为描述观察者会观察特定对象的状态变化,一旦状态有所变化或产生特定条件,被观察对象会通知给观察者,而观察者则会依据通知信息采取特定处理措施。举个例子,公司接到了一个大项目,各个部门都在观察项目的进度,一旦洽谈成功,项目正式进入启动阶段,那么设计部就会出图纸,开发部就会出流程、出架构,售前部就会跑现场实地勘测…项目就是被观察者,而各个部门就是观察者。二、角色关系观察者模式就两种角色——观察者和被观察者。观察者对象往往会规范结构,一般是继承一个抽象观察者。I. 抽象观察者会定义3个重要原创 2021-07-19 11:01:14 · 164 阅读 · 0 评论 -
Java 动态代理解析
引言本博客总结自《Java 编程思想》第十四章一、实现第一个动态代理程序代理是软件设计中重要的设计思想,它允许我们在调用实际操作之前或之后解耦式地编写额外的操作,而一旦不需要这些操作了,就可以轻易的移除它们。浏览了《编程思想》中对动态代理的解释,我发现动态代理的实现也是非常简单的。想要实现动态代理,除了要借助于 Java 的运行时类型信息( RTTI :Run-Time Typ...原创 2020-01-02 23:51:37 · 301 阅读 · 0 评论 -
Java常用设计模式————享元模式
引言享元模式,也叫蝇量模式(Flyweight Pattern)。运用共享技术有效地支持大量细粒度的对象。享元模式常用于系统底层开发,解决系统的性能问题。例如数据库连接池,里面都是创建好的连接对象,在这些连接对象中,如果有我们需要的则直接拿来用,避免重新创建,如果没有,再去创建。享元模式能够解决重复对象的内存浪费问题,在一些不需要总是创建新对象,可以使用对象资源池时,可以从资源池中获取。这样可以降低系统内存消耗,同时提高效率。享元模式经典的应用场景就是池技术,String常量池、数据库连接池原创 2020-07-11 22:56:16 · 322 阅读 · 0 评论 -
Java常用设计模式————外观模式
引言外观模式(Facade Pattern),又叫“过程模式”。外观模式为子系统中的一组接口提供一个一致的入口,此模式定义了一个高层接口,这个接口使得这一组子系统更加易用。一、案例分析生活中有很多类似的案例,比如驾驶员驾驶汽车,只需要操作方向盘、档杆、离合器、刹车、油门这几个主要接口,而汽车内部的一组操作则不需要驾驶员考虑,比如驾驶员踩刹车后,车子就会停下来,而系统内部实际上通过“刹车”这一接口,经过一系列的机械传动到达刹车片。再比如,一套豪华的家庭影院,用户只需要简单点击遥控器上的“开始”原创 2020-07-03 20:29:21 · 366 阅读 · 0 评论 -
Java常用设计模式————组合模式
引言组合模式,是一种类似递归算法的结构性设计模式,通过以简单的 List ,组合本类对象,实现树状对象结构的“部分、整体”的层次。它可以让调用程序不需要关心复杂对象与简单对象的区别,而统一地实现处理逻辑。对于个体与整体存在一定共性的数据场景的展示非常有帮助,比如省市区的树状结构,领导与员工、校院系等。一、组合模式的类图结构用套娃形容组合模式非常贴切,其编码核心其实就是用数组来组合下级对象,而下级对象本身也属于此类实例。一般就是用于描述某种极具共性的实体类,如省、市、区;领导、员工等。原创 2020-06-25 21:15:26 · 357 阅读 · 0 评论 -
Java常用设计模式————装饰者模式
引言装饰者模式,又叫装饰器模式。它可以动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更灵活,同时装饰者模式也体现了OCP原则。在客户端调用使用了装饰者模式的对象时,就好像在使用构造器层层包裹核心对象,层层装饰核心对象,因此叫做装饰者模式。一、装饰者模式类图装饰者模式属于结构型设计模式。在JDK的IO流API中,就利用了装饰者模式:以简单的形状和颜色为例。如何为不同的形状装饰新的颜色呢?上图中,Shape和ShapeDecorator都是抽象类,一般情况下,装饰者模式原创 2020-06-24 22:11:48 · 666 阅读 · 0 评论 -
Java常用设计模式————桥接模式
引言在实际的业务中,经常会遇到多维度的概念组合,公园的门票,颐和园有年票、月票、日票,故宫也有年票、月票、日票。那么不同的公园和票种类型就可以视为两种不同的纬度,它们之间会形成相互组合的关系。在类的设计上,如果任由两种纬度的类任意组合的话,那么就会形成笛卡尔积的情况,使类泛滥,难以维护。在设计模式中,桥接模式就是为了解决这个问题而提出的,它通过将两种或多种纬度以上层抽象的组合关系为基础,形成一种桥接模型,将业务的组合时机延迟到客户端调用使才发生,避免在编写类的时候,大量的枚举每一种具体情况。原创 2020-06-22 23:20:00 · 328 阅读 · 0 评论 -
Java常用设计模式————适配器模式
引言由于无法直接使用某个类中的方法而采取的一种中间类转换的策略。将一个类的接口转换成另一个接口,让原本接口不兼容的类可以兼容。适配器模式可以分为三种:类适配器、对象适配器、接口适配器。它们之间的区别主要体现在适配器角色与被适配角色之间的依赖关系上。如类适配器是通过继承的方式,令适配器继承被适配类。一、类适配器...原创 2020-06-21 11:43:56 · 321 阅读 · 0 评论 -
设计模式七大原则
引言设计模式如单例模式、工厂模式、适配器模式等,大概有二十多种,但是这些设计模式的背后,有七大设计基本原则。它们分别是:单一职责原则,接口隔离原则,依赖倒转原则,里氏替换原则,开闭原则(OCP),迪米特法则,合成复用原则。这些设计模式的基础设计原则,虽然都非常简单,但是却指导着软件开发的方方面面。这篇文章对各个原则做以简单总结。一、单一职责原则单一职责原则(SRP:Single responsibility principle)又称单一功能原则,它规定一个类应该只有一个发生变化的原因。应原创 2020-06-05 20:27:48 · 232 阅读 · 0 评论 -
Java常用设计模式————建造者模式
引言建造者模式(Builder Pattern)使用多个简单对象一步一步构建成一个复杂的对象。这种类型的设计模式属于建造型模式,它提供了一种创建对象的最佳方式。一个Builder会一步步构建最终的对象。该Builder类是独立于其他对象的。实现概要建造者模式的实现并没有一个特别经典的套路,原因是在多数情况下复杂对象的构建往往千奇百怪。但为了更好的理解建造者模式使用的场景,我们假设如...原创 2018-09-30 19:11:11 · 393 阅读 · 0 评论 -
抽象工厂模式升级版————泛型化实现
引言今天回看之前总结的抽象工厂模式的实现《Java常用设计模式————抽象工厂模式》,聚焦于抽象工厂模式的缺点,试着改进了一下。回顾一下抽象工厂模式的缺点:在添加新的产品类型时,难以扩展抽象工厂来生产新种类的产品。这是怎么回事呢?原来,老套的实现方式是为每种类型的产品都创建一个具体的工厂类,这个类只生产一种特定类型的产品。因此,当有新的类型的产品加入系统时,就必须添加一个对应的工厂...原创 2018-09-29 20:48:21 · 3494 阅读 · 7 评论 -
Java常用设计模式————原型模式(二)之深拷贝与浅拷贝
引言clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢? 1 使用new操作符创建一个对象 2 使用clone方法复制一个对象 那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到new操...原创 2018-04-01 23:12:12 · 554 阅读 · 0 评论 -
Java常用设计模式————原型模式(一)
介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 原型模式用于创建重复的对象,同时又能保证性能。当直接创建对象的代价比较大时,则采用这种模式。(例如,一个对象需要在高代价的数据库操作之后被创建,并结合缓存机制,在下一次请求时返回它的克隆对象,在需要的时候更新数据库,以此来减少数据库调用)。 ...原创 2018-04-01 17:06:15 · 252 阅读 · 0 评论 -
Java常用设计模式————抽象工厂模式
简介每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。与工厂方法模式的区别工厂方法模式针对的是一个产品等级结构,而抽象工厂模式针对的是多个产品等级结构,因此抽象工厂模式在结构上要比工厂方法模式更加复杂和抽象,也更具一般性。代码实现第一步:创建产品族接口package design.pattern.abstractfactory;public interface...原创 2018-03-21 21:18:39 · 486 阅读 · 4 评论 -
Java常用设计模式————工厂模式
简介:工厂模式(Factory Pattern)是Java中最常用的设计模式之一,又称多态工厂模式、虚拟构造器模式。属于创建型模式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。主要作用:将类的实例化(具体产品的创建)延迟到工厂类的子类(具体工厂)中完成,即由子类来决定应该实例化那一个类。应用场景:1.在编码时无法预...原创 2018-03-21 09:46:08 · 349 阅读 · 0 评论 -
Java常用设计模式————单例模式
单例模式简介90%以上的设计模式都或多或少的应用了接口和抽象类,而单例比较特殊,并没有接口的应用。单例Singleton指仅仅被实例化一次的类。通常被用来代表那些本质上唯一的系统组件。————《Effective Java》数据库连接获取类的对象可以是单例的。单例的意思就是在内存中只有一个对象。而单例和static有是有区别的,static是用来修饰类中的成员变量和成员方法的,...原创 2018-03-18 21:28:37 · 514 阅读 · 0 评论