架构设计
文章平均质量分 71
高可用、高性能、高并发、分布式、微服务等。
街灯下的小草
这个作者很懒,什么都没留下…
展开
-
【设计模式】原型模式
当我们需要在运行时指定实例化类时,比如,类的动态加载,可以使用原型模式。eg:Prototype克隆自身的类package com.lanhuigu.base.design.create.prototype;public class Prototype implements Cloneable{ private String name; public String getNa原创 2016-09-22 13:51:16 · 353 阅读 · 0 评论 -
【设计模式】建造者模式
一 建造者模式作用将一个复杂对象的构造与其表现分离,使用同样的构造过程,可以创建出不同的表示。二 应用场景当构造过程中允许被构造的对象有不同的表示时;创建独立对象的算法应该独立于该对象的组成部分以及装配方式时;三 参与对象1、Builder创建一个用于创建Product对象的各部件指定抽象接口2、ConcreteBuilderBuilder接口的实现类,实现各部...原创 2016-09-20 15:37:31 · 443 阅读 · 0 评论 -
【设计模式】抽象工厂模式
一 抽象工厂模式作用提供一个创建一系列相关或相互依赖对象的接口,不需要指定具体的实现类。二 应用场景1)一个系统要独立于它的产品创建,组合和表示。2)一个系统要由多个产品系列中的一个来配置。3)提供一个产品类库,我们只让用户看到接口,而不想让用户看到具体的实现。三 UML类图抽象工厂方法模式静态类图:四 参与对象1)AbstractFactory声明...原创 2016-09-05 16:40:50 · 459 阅读 · 0 评论 -
【设计模式】工厂方法模式
一 工厂模式作用工厂模式(factory pattern)是一种常用的对象创建型设计模式,是用工厂方法代替new操作的一种模式。定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使得一个类的实例延迟到其子类。我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,但是可以考虑使用工厂模式,虽然这样做,...原创 2016-05-17 00:07:32 · 657 阅读 · 0 评论 -
【设计模式】状态模式
状态模式作用:定义对象间一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并且自动更新。应用场景:(1)一个对象的行为取决于其状态,并且它必须在运行时刻根据状态改变它的行为。(2)一个操作中含有庞大的多分支结构语句,并且这些分支依赖于该对象的状态。参与对象:(1)Context定义客户感兴趣的接口,维护一个ConcreteStat原创 2016-10-04 11:10:45 · 834 阅读 · 0 评论 -
【设计模式】适配器模式
一 适配器模式作用将一个类的接口转换为客户希望的另外一个接口,使得不兼容的接口兼容在一起。二 应用场景1)当想使用一个已经存在的类,但是类的接口不符合需求;2)创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;3)不能对子类接口进行匹配时,可以通过适配器模式匹配其父类的接口;三UML图适配器模式静态类图:...原创 2016-09-28 09:55:13 · 597 阅读 · 0 评论 -
【设计模式】桥接模式
桥接模式的作用:将抽象与实现分离,使得二者可以独立的变化。应用场景:(1)不希望抽象与实现之间存在一个唯一固定的绑定关系,实现解耦处理。(2)类的抽象和它的实现都可以通过子类去进行扩展。(3)抽象实现的修改不会影响客户程序,不需要编译。(4)多个对象共享实现,但是不希望客户知道共享机制。参与对象:Abstraction定义抽象接口。Refin原创 2016-09-28 11:46:41 · 466 阅读 · 0 评论 -
【设计模式】组合模式
组合模式的作用:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。应用场景:(1)表示对象的部分-整体层次结构。(2)希望用户忽略组合对象与单个对象的不同,用户将统一的使用组合结构中的所有对象。参与对象:Component组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接原创 2016-09-28 18:12:09 · 765 阅读 · 0 评论 -
【设计模式】装饰者模式
作用:动态的给对象添加一些额外的职责。应用场景:(1) 在不影响其他对象的情况下,以动态,透明的方式给单个对象添加职责。(2) 处理可以撤销的职责。(3) 当不能采用子类的方法进行扩充时。参与对象:Component定义一个接口,准备接收动态添加的职责。ConcreteComponent实现接口,将要接受添加职责的对象类。De原创 2016-09-29 16:06:18 · 568 阅读 · 0 评论 -
【设计模式】外观模式
一 外观模式作用为子系统中的一组接口提供一个一致的界面, Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。可以使得子系统与客户系统解耦。二 应用场景1)当需要为一个复杂子系统提供一个简单接口时。子系统通常因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统...原创 2016-09-30 11:32:11 · 751 阅读 · 0 评论 -
【设计模式】策略模式
一 策略模式作用定义一个个算法,即算法族,把这些算法分别封装起来,这些算法可以相互替换,这种模式让算法的变化独立于使用算法的客户。二 应用场景1)许多相关的类仅仅是行为有异,该模式提供一种用多个行为中的一个行为来配置一个类的方法。2)需要使用一个算法的不同变体。3)算法使用用户不应该知道的数据,使用该模式以避免暴露复杂的,与算法相关的数据结构。三UML图策略模式静...原创 2016-10-04 11:51:05 · 918 阅读 · 0 评论 -
【设计模式】享元模式
享元模式(Flyweight)作用:对象结构型模式运用共享技术有效地支持大量细粒度的对象。应用场景:(1)一个应用程序使用大量相同或者相似的对象,造成很大的存储开销。(2)对象的大部分状态都可以外部化,可以将这些外部状态传入对象中。(3)如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。(4) 应用程序不依赖于对象标识。由于Flyw原创 2016-09-30 15:31:20 · 585 阅读 · 0 评论 -
【设计模式】代理模式
代理模式作用:为其他对象提供一种代理,并以控制对这个对象的访问。应用场景:(1) 远程代理(Remote Proxy)为一个位于不同的地址空间的对象提供一个本地的代理对象。这个不同的地址空间可以是在同一台主机中,也可是在另一台主机中。也即为不同地址空间提供局部的代表。(2) 虚拟代理(Virtual Proxy)根据需要创建开销很大的对象。如果需要原创 2016-09-30 16:11:35 · 2733 阅读 · 4 评论 -
【设计模式】责任链模式
责任链模式作用:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连接成一条链,并根据这条链传递请求参数,直到有某个对象处理请求为止。使用这一模式,是想给多个对象处理一个请求的机会,从而解耦发送者和接受者。应用场景:(1)有多个的对象可以处理一个请求,哪个对象处理请求运行时刻自动确定。(2)在不明确指定接受者的情况下,向多个对象中原创 2016-10-01 13:06:34 · 458 阅读 · 0 评论 -
【设计模式】命令模式
命令模式作用:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式又称为动作(Action)模式或事务(Transaction)模式。应用场景:(1)在不同的时间指定请求、将请求排队和执行请求。(2)支持命令的撤销(Undo)操作和恢复(Redo)操作。(3)支持修改日志,当系统崩溃时原创 2016-10-01 15:09:49 · 625 阅读 · 0 评论 -
【设计模式】解释器模式
解释器模式作用:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。应用场景:(1)有一个简单的语法规则,比如一个sql语句,如果我们需要根据sql语句进行rm转换,就可以使用解释器模式来对语句进行解释。参与对象:(1)AbstractExpression(抽象表达式)声明一个所有具体表达式都要实现的抽象接口(或者抽象类)原创 2016-10-01 17:04:53 · 766 阅读 · 0 评论 -
【设计模式】迭代器模式
迭代器模式作用:使用迭代器模式来提供对聚合对象的统一存取,即提供一个外部的迭代器来对聚合对象进行访问和遍历 , 而又不需暴露该对象的内部结构。又叫做游标(Cursor)模式 。应用场景:(1)访问一个聚合对象的内容而无需暴露它的内部表示。(2)为聚合对象提供多种遍历方式。(3)为遍历不同的聚合结构提供一个统一的接口 (即, 支持多态迭代)。参与对象:原创 2016-10-02 18:14:04 · 595 阅读 · 0 评论 -
【设计模式】中介者模式
中介者模式作用:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用,从而使其耦合松散,同时,可以独立地改变他们之间的交互。应用场景:(1)一组对象以定义良好但是复杂的方式进行通讯,产生的交互对象结构混乱,难以理解。(2)一个对象引用其他很多对象,并且直接与这些对象通讯,导致对象难以复制。(3)想要定制一个分部在多个方法中的行为,但是又不想产生太原创 2016-10-02 21:38:16 · 439 阅读 · 0 评论 -
【设计模式】备忘录模式
备忘录模式作用:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象状态恢复至保存时的状态。应用场景:(1)必须保存一个对象在某一时刻的状态,在需要时才能恢复至先前的状态。(2)如果一个用接口来让其它对象直接得到这些对象状态,将会暴露对象的实现细节并破坏对象的封装性。参与对象:(1)Memento备忘录存储原创 2016-10-03 15:16:07 · 408 阅读 · 0 评论 -
【设计模式】观察者模式
观察者模式作用:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知,并且自动更新。应用场景:(1)当一个抽象模型有两个方面,其中一个方面依赖于另一方面,将二者封装到独立的对象中,以使他们可以独自的改变和复用。(2)当一个对象的改变需要同时改变其它对象,而不知道具体有多少对象等待改变。(3)当一个对象必须通知其它对象,而原创 2016-10-03 17:40:32 · 524 阅读 · 0 评论 -
【设计模式】模板方法模式
一 模板方法作用定义一个操作中算法的骨架,将一些算法的步骤延迟到子类中。二 应用场景(1)一次性实现一个算法的不变的部分,将可变的留给子类来实现。(2)各子类中公共的行为应该被提起出来并集中到一个公共的父类中,以避免代码的重复。(3)控制子类扩展。三UML图模板方法模式静态类图:四 参与对象1)AbstractClass定义抽象的原语操作,具体的子类将...原创 2016-10-04 12:09:04 · 720 阅读 · 0 评论 -
【设计模式】访问者模式
访问者模式作用:表示作用于某个对象结构中的各个元素的操作,使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。应用场景:(1)一个对象结构包含很多类对象,它们有不同的接口,但是想对这些对象实施一些依赖于其具体类的操作。(2)需要对一个对象中的对象进行许多不相关的操作,但是,我们想避免这些操作耦合这些对象。(3)定义对象结构的类很少改变,但是经常需要在这个对原创 2016-10-04 12:36:36 · 774 阅读 · 1 评论 -
【设计模式】单例模式
一 单例模式作用保证一个类仅有一个实例,同时提供一个全局访问点。二 应用场景(1)当类只能有一个实例,并且可以从一个公开点访问它。(2)唯一类通过子类进行扩展,客户无需更改代码就能创建一个实例。三UML图单例模式静态类图:四 参与对象定义一个Instance操作,允许客户访问其唯一实例。五单例模式8种写法首先需要分清两个概念:饿汉式:在类加载的时...原创 2016-09-22 13:06:14 · 555 阅读 · 0 评论 -
【daisy-framework】分布式事务技术选型
分布式事务技术方案,本地事务,2PC,TCC,本地消息表,MQ 事务消息等。原创 2021-01-22 14:12:56 · 654 阅读 · 1 评论 -
【daisy-framework】MySQL 开发规范
MySQL 命名规范,基本设计规范,字段设计规范,索引设计规范,常见索引列建议,如何选择索引列的顺序,以及数据库 SQL 开发规范原创 2021-01-17 21:07:35 · 305 阅读 · 0 评论 -
【daisy-framework】消息中间件技术选型
RocketMQ、RabbitMQ、Kafka、ActiveMQ 选型 应用场景、高可用、消息持久化、顺序性、大量积压处理等原创 2020-04-07 09:53:38 · 638 阅读 · 0 评论 -
【daisy-framework】缓存中间件技术选型
缓存应用场景、一致性、持久化、冷热数据、雪崩等原创 2020-04-08 15:43:54 · 839 阅读 · 0 评论 -
【daisy-framework】SpringBoot+MyBatis+Druid 多数据源
前言Github:https://github.com/yihonglei/daisy-framework/tree/master/daisy-springboot-framework(daisy工程)概述多数据源主要解决高并发读写分离或多库在一个应用处理系统业务。多数据源中心思想一样,但是根据自己业务情况有很多种写法实现多数据源,也有很多知名或不知名的开源分布式 ORM 框架设计时候就按照多数据源设计的,使用时候天然就支持。多数据源个人觉得要满足如下基本使用功能:1、有多个业务原创 2021-01-08 18:09:47 · 717 阅读 · 0 评论 -
【daisy-framework】延时任务(DelayTask)
前言Github:https://github.com/yihonglei/daisy-framework一 延时任务延时任务依靠延时队列实现。我们有定时任务了,为什么还需要延时任务?假如一个线程每隔5s去处理一次业务,这个业务依赖别的条件,有可能处理成功,有可能处理失败,如果处理成功,则线程退出,如果处理失败,我们需要让任务隔5s再次去处理,如果处理失败,继续5s周期去处理,但是,这个任务经过20s的时候还是没有处理业务成功,线程退出,不继续处理。这个场景是假设的场景,通过别的原创 2020-06-14 20:55:00 · 1174 阅读 · 0 评论 -
【daisy-framework】事件监听(event,listener)
前言Github:https://github.com/yihonglei/daisy-framework一 事件监听Java很多web框架源码都能看到很多事件监听的存在,主要解决的问题就是类似观察者模式的行为,当一件事情发生的时候,其他的相关事情需要知道并处理。事件监听三要素: 事件源,事件对象,事件监听器。1、监听器需要注册,即注册到某个数据结构,map或list等等存储起来;2、一件事情的发生源头,这件事情需要触发监听器,让监听器能感受到,监听器才能去处理业务;3、原创 2020-05-24 19:14:32 · 750 阅读 · 0 评论 -
【daisy-framework】集成 RocketMQ
前言Github:https://github.com/yihonglei/rose-framework一rose-rocketmq-spring-boot-starter介绍自定义rocketmq的starter,使用rocketmq时直接引入jar包使用即可。二rose-rocketmq-spring-boot-starter实现1、项目结构2、项目说明an...原创 2020-01-14 10:59:49 · 511 阅读 · 0 评论 -
【daisy-framework】项目命名规范
前言Github:https://github.com/yihonglei/rose-framework一 rose-framework介绍Spring Boot前后端分离,集成MyBatis、数据库、消息中间件、缓存中间件、分布式锁、分布式事务、异步事件、自定义监控系统、自定义常用基础组件等常用Web开发技术,方便于自己平时使用时随机摘取使用。二 技术架构开发语言:Jav...原创 2020-01-12 16:32:43 · 733 阅读 · 0 评论