随笔分类 -  设计模式

关联和依赖
摘要:依赖是临时关系,生命周期仅限于一个函数; 关联(association)则是长久关系,一般为对象的属性,其生命周期和对象本身是一致的; 聚合(aggregation)本身也是关联,但是其语义上是has-a的关系,同时保持独立;就像大楼和砖头的这种关系;大楼倒了,砖头其实还是可以存在的;再比如Cust 阅读全文

posted @ 2018-07-08 16:02 张叫兽的技术研究院 阅读(201) 评论(0) 推荐(0) 编辑

Builder模式
摘要:Builder模式有什么好处? 构造函数构造一个函数的好处就是直接,但是缺点就是如果参数比较多,需要重载构造函数或者一个构造函数里面定义多个构造参数,对于调用方来讲十分不友好; 另外一种方式就是java bean模式,定义一个简洁的构造函数,然后通过set属性的方式来构造;这种方式避免了构造函数模式 阅读全文

posted @ 2018-06-04 09:10 张叫兽的技术研究院 阅读(208) 评论(0) 推荐(0) 编辑

关于Gateway
摘要:为什么要有gateway?就是因为如果没有,很多的功能需要在在每个微服务中都实现,这样成本很高。 阅读全文

posted @ 2018-01-27 23:10 张叫兽的技术研究院 阅读(164) 评论(0) 推荐(0) 编辑

参数不统一,如何进行抽象?
摘要:今天在设计ImpalaService和HiveService的时候,其实大部分操作都是一样的;但是某些接口的参数不一样,但是我现在想要把他两抽成同一个interface;这意味着必须要接口一致才可以;于是我想到了就是把参数包装成一个参数类,这个参数类包含了双方的所需的参数,按需从这个参数里面处理。 阅读全文

posted @ 2018-01-27 10:38 张叫兽的技术研究院 阅读(403) 评论(0) 推荐(0) 编辑

实例,单例和静态类区别
摘要:不要纠结底层区别,因为区别不大,占用内存之争不是很有意义; 实例和静态的根本区别在于概念;面向过程年代,大家都是静态函数,单例模式是面向对象提出之后的设计模式,如果一个类里面的函数是和这个类有机的一体的,则是单例,如果类只是作为容器(比如工具类),那么就是静态。 网上一则比喻很恰当,一个人的胳膊腿, 阅读全文

posted @ 2017-04-06 22:17 张叫兽的技术研究院 阅读(506) 评论(0) 推荐(0) 编辑

软件设计
摘要:软件设计 关系,关系,关系!做设计很重要的一点就是理清楚关系,从session池的处理(连接到同端的连个session怎么区分),到通知参数(多个文件情况如何通知应用),都在说明,设计就是要捋顺对象间关系,面向对象就是构建世界,貌似简单,但是世界对象间很多关系是隐含的,并不显式,有些关系可以忽略不用 阅读全文

posted @ 2016-08-31 21:00 张叫兽的技术研究院 阅读(270) 评论(0) 推荐(0) 编辑

Memento:客户端瘦身
摘要:说是客户端瘦身,其实备忘录模式的本质让调用客户端职责减轻,将客户端的对于实现比如数据恢复之类细节的内容封装在操作类之中。其实面向对象的一重要方面就是划分清楚职责,这样可以减少改到造成的影响,便于扩展。 Originator的职责是负责备忘录数据对象的生产以及回复,并保存当前版本数据对象,Originator本身是“宽接口”,可以对备忘数据进行修改和读取; CareTaker则是负责备忘数... 阅读全文

posted @ 2013-08-17 08:07 张叫兽的技术研究院 阅读(251) 评论(0) 推荐(0) 编辑

Prototype:Copy和Clone
摘要:原型模式在C#中的实现比较直接,因为只需要继承了IClone的接口,就可以通过重写Clone方法,调用MemberwiseClone()来实现ProtoType的方式。 class Test:ICloneable{ public string Context = string.Empty; public string Head = string.Empty; public o... 阅读全文

posted @ 2013-08-13 07:47 张叫兽的技术研究院 阅读(233) 评论(0) 推荐(0) 编辑

Abstract Factory
摘要:工厂模式比较好理解,其实就是通过访问工厂返回单一的对象/多个对象。那么抽象工厂就是返回多个抽象对象。这意味工厂返回对象纵向的一个扩展。但是很多时候,抽象工厂是两个维度的扩展,比方说在数据库类型和表对象两个维度上面(《大话设计模式》)进行扩展,一方面数据库可能扩展是sybase或者MySQL,另一方对于表对象可以扩展是Project,Student等等。那么对于其中一个维度进行反射配置。 阅读全文

posted @ 2013-07-28 22:29 张叫兽的技术研究院 阅读(149) 评论(0) 推荐(0) 编辑

Flyweight
摘要:享元模式的本质其实和singleton的概念有些类似,只不过singleton强调的是一个对象,而享元模式描述的一堆“一个对象”。在GOF中举的例子是英文单词,如果为每一个字母都建立一个对象,这样对于内存消耗比较大,于是他实际是只是创建了24个(英文)字符,至于每个字符的位置和颜色都是由一个“外部状态”(实际可以理解为一个实体)通过传递而返回。 享元模式有两个状态,内部状态和外部状态,内... 阅读全文

posted @ 2013-07-28 11:37 张叫兽的技术研究院 阅读(236) 评论(0) 推荐(0) 编辑

Chain of Responsibility
摘要:比较经典的距离是请假申请(《大话设计模式》中的例子),请假是要逐级判断,只有级别到了才有权利审批,从构造上面其实“装饰”模式和“职责链”之间有相通的地方,但是两者的内涵去不同,前者其实是由一个封装的概念,而且会有一个核心对象,每一个装饰模式的扩展类其实都是为一个类的行为做服务,做封装;而职责链则是有一个传递的概念,通过继承父类的Handle的方法里面做校验是否需要传递到更高一级。 而且职责链... 阅读全文

posted @ 2013-07-25 22:14 张叫兽的技术研究院 阅读(214) 评论(0) 推荐(1) 编辑

Decorator
摘要:装饰模式,他的本质是对核心对象的行为进行封装。比方说ClassA一个方法OperationA(),如果想要在执行OperationA之前想要执行OperationB(),同时又不影响ClassA,这个时候就可以使用装饰模式,设计ClassB,里面有OperationB(),执行完OperationB内容之后再来执行类A的operationA()操作。这里面的类B维持一个对类A的引用,这样可以保证对... 阅读全文

posted @ 2013-07-23 21:13 张叫兽的技术研究院 阅读(226) 评论(0) 推荐(0) 编辑

Adapter
摘要:在介绍适配器原则之前介绍一下Abstract Server模式。 上面的图示描述的是一个开关类(Switch)控制灯具(Light)的开关。但是现在的这个关系违反了依赖翻转,Switch的功用被固定在了Light上面。如果以后有需求控制车门或者其他,那么就需要修改Switch,这样违反了开闭原则(OCP)。为了对修改/扩展开放,使用Abstract Server 模式: 通过一个接口... 阅读全文

posted @ 2013-07-23 08:38 张叫兽的技术研究院 阅读(320) 评论(0) 推荐(0) 编辑

Bridage
摘要:对于有两个以上的维度的对象,如下图:这张图的业务逻辑是这样的,Hayes,USR以及Emie都是上网的猫,现在有两条线路,一条是传统Dial,还有一条线路是专线,不需要拨号,这样每创建一种线路就意味着要创建三种上网猫,或者说每添加一种上网猫,就要为所有的线路都添加这种猫。 每个二层级增加一个类,都将会导致重新创建三个三级别的对象,这个时候就使用桥接模式 二层和三层分别抽象出来,并是... 阅读全文

posted @ 2013-07-22 22:35 张叫兽的技术研究院 阅读(402) 评论(0) 推荐(0) 编辑

Proxy
摘要:代理模式的核心是将业务分离。代理类是将数据和操作又做了一次封装,在调用真实实现类之前或者之后再做点什么,这“做点什么”的逻辑是和纯粹“操作”不相干的。比如在Order的添加是有两部分的,一部分是应用层的List增加Item,另一部分是数据库层面的增加一条记录,这在逻辑上面是需要分开的,于是代理类负责了数据库,Order的实现类则负责应用层的添加。--案例摘自Bob大叔的书。 再比如一个队列里面装... 阅读全文

posted @ 2013-07-17 22:50 张叫兽的技术研究院 阅读(286) 评论(1) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示