随笔分类 -  设计模式

摘要:1.1 异常处理 异常的处理应当符合 尽早抛出,延迟捕获 的原则。 在进行 MVC 分层调用时,Service 与 Dao 层触发的异常应统一向上抛出,交给 Controller 层处理。因为只有 Controller 层可以更好的决策发生异常时应当给用户何种反馈。 但这样会造成我们的 Contro 阅读全文
posted @ 2020-03-26 19:46 牛有肉 阅读(1000) 评论(0) 推荐(0) 编辑
摘要:前面的博客 基于 socket 手写一个 TCP 服务端及客户端 写过一个简单的 TCP 服务端客户端,没有对代码结构进行任何设计,仅仅是实现了相关功能,用于加深对 socket 编程的认识。 这次我们对整个代码结构进行一下优化,使其模块化,易扩展,成为一个简单意义上的“框架”。 对于 Socket 阅读全文
posted @ 2020-03-22 18:44 牛有肉 阅读(706) 评论(0) 推荐(0) 编辑
摘要:代理模式 为其他对象提供一个代理以控制对某个对象的访问。代理类主要负责为委托了(真实对象)预处理消息、过滤消息、传递消息给委托类,代理类不现实具体服务,而是利用委托类来完成服务,并将执行结果封装处理。代理类本身不实现服务,而是通过调用被代理类中的方法来提供服务。 从设计模式上看,代理模式与适配器模式 阅读全文
posted @ 2020-03-20 15:17 牛有肉 阅读(166) 评论(0) 推荐(0) 编辑
摘要:适配器模式可以将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。 适配器模式是一种对象结构型模式,这里的接口不仅仅是java语言中的interface,更多是指一个类型所具有的方法特征集合,是一种逻辑上的抽象。 客户端需要一个target(目标) 阅读全文
posted @ 2020-03-18 00:13 牛有肉 阅读(123) 评论(0) 推荐(0) 编辑
摘要:总结:策略模式对对象与行为进行了解耦,增加类的可扩展性,使我们对类的扩展更加符合开闭原则。 忽然对设计模式有了很多感悟,原来对设计模式的学习也费了不少功夫,但始终感觉轻飘飘的,抓不住重点。 最近重构代码的任务比较多,随着对代码结构的重新设计,很多之前不明白的地方忽然就通了。 从优化代码结构的角度出发 阅读全文
posted @ 2020-03-15 20:57 牛有肉 阅读(196) 评论(0) 推荐(0) 编辑
摘要:1、开闭原则(Open Close Principle) 开闭原则的意思是:对扩展开放,对修改关闭。在程序需要扩展或修改时,不应直接改变原有代码,而是应该将代码模块化、组件化,对模块进行拔插使用。 比如,一个 TimeUtil ,我们最初编写时将其计时单位设置为了毫秒,后来接到新的需求,需要将计时单 阅读全文
posted @ 2020-03-15 19:22 牛有肉 阅读(478) 评论(0) 推荐(0) 编辑
摘要:责任链模式可以模块化的封装处理逻辑,进行调用方和被调用方的解耦。 责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理 阅读全文
posted @ 2020-02-29 00:28 牛有肉 阅读(654) 评论(0) 推荐(0) 编辑
摘要:定义 观察者模式:定义了一种对象间的一对多依赖关系,一旦被依赖对象改变状态,所有观察者都会得到通知并自动更新。 实例 我们在日常生活中,微信公众号的运作模式便是典型的观察者模式的实现,一旦公众号新推了内容,所有关注公众号的账号都会得到通知。 优缺点 观察者模式的优点是可以实现表示层与数据逻辑层的分离 阅读全文
posted @ 2019-11-26 19:43 牛有肉 阅读(246) 评论(0) 推荐(2) 编辑
摘要:静态工厂模式是一种改进的获取实例的方法。 通常我们会使用new关键字调用类的构造方法来创建一个对象,静态工厂模式相对于传统的创建对象的方式有以下优点: 1. 可以更加富有语义的创建实例:当一个类的构造方法有非常多的参数或被重载过很多次的话,因为JAVA对构造方法命名的规定(与类名相同),我们必须编写 阅读全文
posted @ 2019-11-26 16:21 牛有肉 阅读(1420) 评论(0) 推荐(1) 编辑
摘要:装饰器模式是JAVA开发过程中常用的一种设计模式,该设计模式用于对类进行横向的功能扩展,也就是达到对类进行“装饰”的目的。JDK中的IO流便是使用了装饰类模式。 装饰器模式的类图一般如下: 以实体类基类的引用为入参,装饰类可以装饰整个继承链上的实体类。 I/O流的继承关系更为直接: 很多刚刚接触装饰 阅读全文
posted @ 2019-11-25 21:32 牛有肉 阅读(416) 评论(0) 推荐(1) 编辑
摘要:以我的经验为例(如有不对欢迎指正),在生产过程中,经常会遇到下面两种情况: 1.封装的某个类不包含具有具体业务含义的类成员变量,是对业务动作的封装,如MVC中的各层(HTTPRequest对象以Threadlocal方式传递进来的)。 2.某个类具有全局意义,一旦实例化为对象则对象可被全局使用。如某 阅读全文
posted @ 2019-11-19 21:40 牛有肉 阅读(4903) 评论(2) 推荐(2) 编辑
摘要:以我的经验为例(如有不对欢迎指正),在生产过程中,经常会遇到下面两种情况: 1.封装的某个类不包含具有具体业务含义的类成员变量,是对业务动作的封装,如MVC中的各层(HTTPRequest对象以Threadlocal方式传递进来的)。 2.某个类具有全局意义,一旦实例化为对象则对象可被全局使用。如某 阅读全文
posted @ 2019-11-19 19:41 牛有肉 阅读(1548) 评论(0) 推荐(3) 编辑