设计模式
文章平均质量分 96
OkidoGreen
这个作者很懒,什么都没留下…
展开
-
缓存模式(Cache Aside、Read Through、Write Through、Write Behind)
概览缓存是一个有着更快的查询速度的存储技术,这里的更快是指比起从初始的数据源查询(比如数据库,以下都称作数据库)而言。我们经常会把频繁请求的或是耗时计算的数据缓存起来,在程序收到请求这些数据的时候可以直接从缓存中查询数据返回给客户端来提高系统的吞吐量,现在我们来看看有哪些缓存模式可以考虑。Cache-AsideCache-Aside是最广泛使用的缓存模式之一,如果能正确使用Cache-Aside的话,能极大的提升应用性能,Cache-Aside可用来读或写操作。读操作我们先来看下读操作的转载 2021-01-07 15:28:00 · 5634 阅读 · 0 评论 -
DCL单例模式
我们第一次写的单例模式是下面这样的:public class Singleton { private static Singleton instance = null; public static Singleton getInstance() { if(null == instance) { // line A ...转载 2020-03-13 10:28:11 · 751 阅读 · 0 评论 -
Cache Aside Pattern(读写缓存模式)
https://www.jianshu.com/p/fb3a41ea18echttps://www.cnblogs.com/findbetterme/p/11443168.html前言缓存是互联网高并发系统里常用的组件。由于多增加了一层,如果没有正确的使用效果可能适得其反,诸如“缓存是删除还是更新?”,“先操作数据库还是先操作缓存?”都是些老生常谈的话题,今天要介绍的是一个由 Facebo...转载 2020-02-06 10:16:37 · 1604 阅读 · 0 评论 -
设计模式——Spring IoC中用到的模板方法模式
http://www.cnblogs.com/gnidoc/p/4981447.html基本概念什么是模板方法(Template method):父类定义了骨架(调用哪些方法及顺序),某些特定方法由子类实现。最大的好处:代码复用,减少重复代码。除了子类要实现的特定方法,其他方法及方法调用顺序都在父类中预先写好了。所以父类模板方法中有两类方法:1、共同的方转载 2017-03-24 10:55:23 · 7767 阅读 · 1 评论 -
分布式模式之Broker模式
问题来源: 创建一个游戏系统,其将运行在互联网的环境中。客户端通过WWW服务或特定的客户端软件连接到游戏服务器,随着流量的增加,系统不断的膨胀,最终后台数据、业务逻辑被分布式的部署。然而相比中心化的系统,复杂度被无可避免的增大了,该如何降低各个组件之间的耦合度。挑战: 需要保证可伸缩性、可维护性、可更新性,需要将服务划分为各个相对独立的组件,组件被分布式的部署,它们之间通过进程间通信方转载 2017-03-20 10:56:27 · 3669 阅读 · 0 评论 -
加载一个类时,其内部类是否同时被加载?静态内部类单例模式
加载一个类时,其内部类是否同时被加载?下面我们做一个实验来看一下。 Java代码 public class Outer { static { System.out.println("load outer class..."); } //静态内部类 static class转载 2017-03-18 21:45:59 · 1223 阅读 · 0 评论 -
Java:单例模式的七种写法
转载出处:http://cantellow.javaeye.com/blog/838473第一种(懒汉,线程不安全): 1 public class Singleton { 2 private static Singleton instance; 3 private Singleton (){} 4 public stati转载 2015-11-17 11:29:31 · 2005 阅读 · 0 评论 -
枚举类型的单例模式(java)
Inspired by Effective Java.Singleton模式是在编程实践中应用最广泛的几种设计模式之一。以前知道的,实现单例的方法有两种(下面的A、B)。刚刚在读《Effective Java的时候》学到一种新的更好的方法(E):单元素的枚举类型。同时通过网上资料也知道了其他两种方法(C、D)。最后一种在Java中从1.5版本开始支持,其他语言在验证后说明。A.饿汉转载 2015-06-05 16:04:00 · 1174 阅读 · 0 评论 -
从 MVC 到前后端分离
从 MVC 到前后端分离1 理解 MVCMVC 是一种经典的设计模式,全名为 Model-View-Controller,即 模型-视图-控制器。其中,模型 是用于封装数据的载体,例如,在 Java 中一般通过一个简单的 POJO(Plain Ordinary Java Object)来表示,其本质是一个普通的 Java Bean,包含一系列的成员变量及其 getter/setter转载 2016-11-09 18:53:39 · 1283 阅读 · 1 评论 -
《JAVA与模式》之状态模式
状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。 状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。状态模式的结构 用一句话来表述,状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在转载 2016-06-12 20:44:36 · 1039 阅读 · 0 评论 -
Agent和Broker的差别是什么?
agent你应该在计算机科学里见过,比如智能agent,多agent环境等等。两个都有“代替委托方操作”的意思,但是具体还有有一些差别。Agent虽然是代理,但是有自己的环境适应方式,委托人只下达指令,如何完成指令由agent自己决定,所以agent又被称为有代理身份的主体;broker更多地体现被动分,更倾向于“经纪人”,决策主要有委托方来完成,在搞权限委托下也可以做很多决策。简单地说,br转载 2017-04-17 11:00:21 · 15659 阅读 · 0 评论 -
观察者模式与事件驱动模式实例比较
观察者模式所涉及的角色有: ● 抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象,抽象主题角色又叫做抽象被观察者(Observable)角色。 ● 具体主题(ConcreteSubject)角色:将有关状态存入具体观察者对象;在转载 2017-05-16 11:22:29 · 1374 阅读 · 0 评论 -
并发模型(一)——Future模式
多线程开发可以更好的发挥多核cpu性能,常用的多线程设计模式有:Future、Master-Worker、Guard Susperionsion、不变、生产者-消费者 模式;jdk除了定义了若干并发的数据结构,也内置了多线程框架和各种线程池; 锁(分为内部锁、重入锁、读写锁)、ThreadLocal、信号量等在并发控制中发挥着巨大的作用。这里重点介绍第一种并发——Future模型。一转载 2017-09-28 16:35:00 · 1310 阅读 · 0 评论 -
并发模型(二)——Master-Worker模式
Master-Worker模式是常用的并行模式之一,它的核心思想是,系统有两个进程协作工作:Master进程,负责接收和分配任务;Worker进程,负责处理子任务。当Worker进程将子任务处理完成后,结果返回给Master进程,由Master进程做归纳汇总,最后得到最终的结果。一、什么是Master-Worker模式:该模式的结构图: 结构图转载 2017-09-28 16:46:03 · 1077 阅读 · 0 评论 -
并发模式(三)——生产者-消费模式
生产者-消费模式,通常有两类线程,即若干个生产者线程和若干个消费者线程。生产者线程负责提交用户请求,消费者线程负责具体处理生产者提交的任务。两者之间通过共享内存缓冲去进行通信。一、架构模式图:类图:生产者:提交用户请求,提取用户任务,并装入内存缓冲区;消费者:在内存缓冲区中提取并处理任务;内存缓冲区:缓存生产者提交的任务或数据,供消费者使用;转载 2017-09-28 16:51:34 · 1853 阅读 · 0 评论 -
Java设计模式(三) Visitor(访问者)模式及多分派场景应用
基本概念Visitor封装一些作用于数据结构中的各元素的操作,不同的操作可以借助新的visitor实现,降低了操作间的耦合性访问者可以将数据结构和对数据的操作解耦,使得增加对数据结构的操作不需要取修改数据结构,也不必去修改原有的操作,而执行时再定义新的Visitor时闲着就行了(在操作添加上易拓展)模式中角色分工Visitor:抽象访问者,在重载的visit函数中声转载 2017-10-18 10:51:16 · 1110 阅读 · 0 评论 -
单例模式有五种写法:懒汉、饿汉、双重检验锁、静态内部类、枚举。
http://blog.csdn.net/nsw911439370/article/details/50456231转 https://biezhi.me/article/how-to-correctly-write-singleton-pattern.html单例模式算是设计模式中最容易理解,也是最容易手写代码的模式了吧。但是其中的坑却不少,所以也常作为面试题来考。本转载 2017-10-11 18:37:18 · 1044 阅读 · 0 评论 -
Builder设计模式结合lombok减少过多传参
https://blog.csdn.net/j16421881/article/details/79368004建造者模式将复杂对象的创建过程简化,用来传参也很合适。lombok的主要作用是通过一些注解,消除样板式代码,更多详见 lombok官网。该框架已经内置了这种模式。 过多的传参,可读性差,尤其是参数类型一致顺序还容易写颠倒。下面以一则不友好的传参为例展示一下,如何通过lombok...转载 2019-01-04 19:48:44 · 763 阅读 · 0 评论 -
JavaBean之Builder模式
https://blog.csdn.net/kangkanglou/article/details/78724240静态工厂和构造器重载构造函数,分别包含多个不同的参数无法很好地扩展到大量的可选参数JavaBean方式调用一个无参构造函数来创建对象,然后通过setter方法来设置必要参数对象构造过程被分割到了几个调用,构造过程中可能导致JavaBean处于不一致的状态,类无法通...转载 2019-01-07 16:08:31 · 1163 阅读 · 0 评论 -
如何理解多租户架构?
https://www.cnblogs.com/pingfan21/p/7478242.html前段时间公司产品进行了架构的进化,进化到了多租户架构。当我第一次听到多租户时,我也挺纳闷,不理解。但当我逐渐的翻阅资料,以及研发功能时。不断的加深了对多租户的理解。尽管我现在也只是浅浅的懂一点而已。 OK,Let's get this straight(让我们搞懂它),接下来让我们问自己几个问...转载 2019-01-15 09:49:20 · 3343 阅读 · 0 评论 -
《JAVA与模式》之策略模式
策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:转载 2016-06-12 20:40:41 · 1104 阅读 · 0 评论 -
《JAVA与模式》之装饰模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不使用创造更多子类的情转载 2015-07-18 20:21:35 · 1115 阅读 · 0 评论 -
工厂方法模式与抽象工厂模式
一、引子 话说十年前,有一个暴发户,他家有三辆汽车——Benz奔驰、Bmw宝马、Audi奥迪,还雇了司机为他开车。不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了?! 而当把这个暴发户的行为放到我们程序设计中来时,会发现这是一个普遍存在的现象。幸运转载 2015-03-05 21:51:41 · 1735 阅读 · 0 评论 -
贫血模型or领域模型
引:http://www.javaeye.com/topic/283668 最近taowen同学连续发起了两起关于贫血模型和领域模型的讨论,引起了大家的广泛热烈的讨论,但是讨论(或者说是争论)的结果到底怎样,我想值得商榷。问题是大家对贫血模型和领域模型都有自己的看法,如果没有对此达到概念上的共识,那么讨论的结果应该可想而知,讨论的收获也是有的,至少知道了分歧的存在。为了使问题具有确定性,我想从转载 2014-06-04 20:41:28 · 2312 阅读 · 2 评论 -
策略模式与工厂模式比较
这段时间看了一些设计模式,看到策略模式与工厂模式的时候,总是感觉他们很相似,不要区分,到具体的场景了你可能还在徘徊到底用工厂还是策略呢?这几天就想写一篇关于策略模式与工厂模式区别的文章,但一直没思路,昨天跟淘宝mm聊了聊,今天早上思路顿时开阔。当时我在说明策略模式与工厂模式区别的时候举了一个例子。说你要去买件衣服,给你50块钱,策略模式的做法就是去京东、当当、淘宝、卓越转载 2012-11-29 15:34:42 · 1172 阅读 · 0 评论 -
里氏代换原则(Liskov Substitution Principle)
作用它指导我们如何正确地进行继承与派生,并合理地重用代码!定义子类型必须能够替换掉它们的父类型、并出现在父类能够出现的任何地方。这个就是尽量用多态的方法编程,也就是GRASP模式中的多态。如果对于每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。转载 2014-04-29 19:00:49 · 1877 阅读 · 0 评论 -
迪米特法则(Law of Demeter)
迪米特法则(Law of Demeter, LoD)又称为最少知识原则(Least Knowledge Principle, LKP),它有多种定义方法,其中几种典型定义如下:(1) 不要和“陌生人”说话。(2) 只与你的直接朋友通信。(3) 每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。(4) 一个对象应当对转载 2014-04-29 19:02:00 · 1472 阅读 · 0 评论 -
组合/聚合复用原则(Composition/Aggregation Principle)
定义又叫合成复用原则。原则就是在一个新的对象里面通过关联关系(包括组合关系和聚合关系)使用一些已有的对象,使之成为新对象的一部分,新对象通过委派调用已有对象的方法达到复用其已有功能的目的。也就是,要尽量使用类的合成复用,尽量不要使用继承。组合/聚合复用原则要点:就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过向这些对象的委派达到复用已有功能的目转载 2014-04-29 19:01:39 · 1653 阅读 · 0 评论 -
依赖倒转原则(Dependency Inversion Principle)
作用:它指导我们如何正确地消解模块间的依赖关系,同时它也是框架设计的核心原则。 依赖倒置原则的本质就是要求将类之间的关系建立在抽象接口的基础上的。Robert Martin这样描述依赖倒置原则[Martin 1996]:传统的策略是把复杂的系统“化整为零,各个击破”。这就是通常所说的分解。SA方法(结构化的分析)也是采用这样的分解策略,把大型和复杂的软件系统分解成若干个人们易于转载 2014-04-29 19:01:13 · 1207 阅读 · 0 评论 -
单一职责原则(Single Responsibility Principle)
1 作用它指导我们如何提高代码的可重用度!2 定义一个类应该仅有一个引起它的变化的原因(职责),或者说一个类只负责一个功能领域中的相应职责。这条原则也称为类设计的“高内聚性原则”。(l)含义之一:避免相同的职责(也称为功能)分散到不同的类中实现。(2)含义之二:也应该要避免一个类承担过多的职责。将过多的职责耦合在一个类中导致了脆弱设计。软件设计真正要转载 2014-04-29 18:59:59 · 1282 阅读 · 0 评论 -
接口隔离原则(Interface Segregation Principle)
作用:它指导我们如何正确地进行接口设计!定义1) 一个类对另外一个类的依赖性应当是建立在最小的接口上Ø 一旦一个接口太大,则需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。Ø ISP可以达到不强迫客户(接口的使用方)依赖于他们不用的方法——在接口设计中应该保证,接口的实现类应该只呈现为单一职责的角色(遵守SRP原则);Ø转载 2014-04-29 19:00:26 · 1766 阅读 · 0 评论 -
让技术人员看得懂的流程(1)——面向对象设计全流程概述
让技术人员看得懂的流程 ——面向对象设计全流程概述谈到流程,大家都会想到熟悉的瀑布模型、螺旋模型、迭代开发、敏捷、RUP等一堆软件工程相关的软件开发流程,但是请不要误会,本文的流程和这些管理流程完全不同,为了以示区分,我把瀑布模型、敏捷、RUP等流程成为项目流程,也就是说这是给项目管理用的;而本文的流程是技术流程,是给技术人转载 2014-06-04 20:41:58 · 1200 阅读 · 0 评论 -
软件设计漫谈之三:30分钟掌握面向对象类的设计原则
30分钟掌握面向对象类的设计原则看过设计模式的人不少,但看过Martin的面向对象的设计原则的估计不多(详情可参考《敏捷软件开发:原则、模式与实践》)。实际上这两者是相辅相成的:设计模式是具体的实践方法,而设计原则是指导思想;设计模式让你知道How,而设计原则让你知道Why。《敏捷软件开发:原则、模式与实践》原著洋洋洒洒几十万言,介绍面向对象类的类的设计几个原则也有几十页,没有耐心转载 2014-06-04 20:43:56 · 1043 阅读 · 0 评论 -
让技术人员看得懂的流程(2)——用例模型
让技术人员看得懂的流程(2) ——用例模型一般的管理流程都将软件项目划分为“需求->分析->设计->实现->维护”,对应的技术流程中首先也肯定是要将需求明确,而“用例模型”就是用于获得和分析需求的。简单来说,用例模型就是要将客户的需求写下来。“需求”不是很好理解,更加通俗的讲法是“故事(story)”。我觉得“故事”这个词非常转载 2014-06-04 20:44:22 · 1579 阅读 · 0 评论 -
java23种设计模式
一、设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式转载 2015-01-20 11:31:03 · 1402 阅读 · 0 评论 -
Java IO 装饰者模式
装饰模式(Decorator) 装饰模式又名包装(Wrapper)模式。 装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。 装饰模式通过创建一个包装对象,也就是装饰,来包裹真实的对象。 装饰模式以对客户端透明的方式动态地给一个对象附加上更多的责任。换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。 装饰模式可以在不创造更转载 2015-01-20 11:04:52 · 1647 阅读 · 0 评论 -
Java 之工厂方法和抽象工厂模式
1. 概念 工厂方法:一抽象产品类派生出多个具体产品类;一抽象工厂类派生出多个具体工厂类;每个具体工厂类只能创建一个具体产品类的实例。 即定义一个创建对象的接口(即抽象工厂类),让其子类(具体工厂类)决定实例化哪一个类(具体产品类)。“一对一”的关系。 抽象工厂:多个抽象产品类,派生出多个具体产品类;一个抽象工厂类,派生出多个具体工厂类;每个具体转载 2015-01-20 13:20:45 · 1182 阅读 · 0 评论 -
java设计模式—工厂模式
一、工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。 工厂模式在《Java与模式》中分为三类:1)简单工厂模式(Simple Factory):不利于产生系列产品;2)工厂方法模式(Factory Method):又称为多形性工厂;3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族转载 2015-01-20 11:56:12 · 1009 阅读 · 0 评论 -
责任链设计模式(过滤器、拦截器)
责任链设计模式(Chain of Responsibility)的应用有:Java Web中的过滤器链、Struts2中的拦截器栈。先看一个问题:给定一个字符串“被就业了:),敏感信息,”,对其中的HTML标记和敏感词进行过滤或替换。本文主要以该问题设计方法的演变来讲解责任链设计模式。第一种设计:没有任何设计模式设计了一个MsgProcessor类,完成字符串处转载 2015-02-03 16:25:44 · 4910 阅读 · 0 评论 -
java设计模式之——策略模式
java设计模式之——策略模式 1,什么是策略模式?策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 2,策略模式有什么好处? 策略模式的好处在于你可以动态的改变对象的行为。 3,设计原则 设计原则是把一个类中经常改变或者将来可能改变的部分转载 2014-08-04 15:05:39 · 1254 阅读 · 0 评论