设计模式之美
设计模式虽好,但不能无脑套用,合适的场景配上合适的模式,方能相得益彰、事半功倍。
懋为
居安思危,思则有备,有备无患,敢以此规。
展开
-
重学设计模式(十)—— 策略模式
前言在日常开发中,我们经常需要在相同的上下文环境中针对不同的业务主体采用不同的处理逻辑。举个简单的例子,当我们在电商网站上购物结算时,往往会根据自身会员等级的不同而享受不同的优惠政策,而从系统实现的角度来讲,需要其运行时根据不同需求决定使用某一具体算法策略。策略模式便能较好的解决这个问题,本篇博客就来探讨一下策略模式。策略模式 策略模式定义了一系列的算法,并将每一个算法封装起来,而...原创 2018-06-30 15:13:08 · 409 阅读 · 2 评论 -
重学设计模式(九)—— 访问者模式
访问者模式(Visitor Pattern)属于对象行为型模式的一种,表示一个作用于其对象结构中的各元素的操作,它可以在不改变各元素类的前提下定义作用于这些元素的新操作。可以这么说,访问者模式算是 GOF 23 中设计模式中最复杂的一个,在实际开发中,使用不是非常广泛。访问者模式的类图如下,我们先来通过一个具体的例子了解一下访问者模式,首先定义两个接口,一个表示被访问对象的内部...原创 2018-05-13 14:00:24 · 228 阅读 · 0 评论 -
重学设计模式(八)—— 模板方法模式
模板方法定义了一个算法的步骤,并允许子类为一个或者多个步骤提供实现。说起模板方法模式,笔者就想起刚开始编写数据库操作代码的场景,在无框架支持的前提下,每次跟数据库的交互都要加载驱动、创建连接、准备语句、执行语句、结果处理、关闭连接、异常处理等步骤。但是仔细观察,很多操作其实都是一样的,因此在Spring中,引入了JDBCTemplate概念,为数据库操作指定了模板、不同厂商的数据库只要...原创 2018-04-18 01:45:53 · 192 阅读 · 0 评论 -
重学设计模式(七)—— 责任链模式
笔者最近在研究SpringMVC的请求处理过程,发现请求拦截器的处理过程就是责任链模式的很好体现,一环扣一环,异常就退出,无需后继处理。 责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动...原创 2018-03-27 00:48:22 · 252 阅读 · 0 评论 -
重学设计模式(六)—— 观察者模式
前言生活中我们经常使用手机订阅功能,用来订阅一些我们感兴趣的东西,比如体育赛况、股票行情等等。每当这些订阅的事务有重大变化发生时,我们都能收到相关通知信息,当然我们也能对失去兴趣的事情取消订阅,这样我们便不会收到相关推送了。这就是Observer观察者模式的一种典型应用场景。Observer观察者模式在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自...原创 2018-03-25 16:44:10 · 233 阅读 · 0 评论 -
重学设计模式(五)—— 装饰器、适配器、门面和代理
Decorator装饰器模式装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。java IO 流是装饰模式一个典型的应用场景。举个生活中的例子,饮品店的饮料价格由原料(咖啡、茶……)价格和配料(糖、奶泡……)价格组成,我们是计算价格的呢?如果为每一种组合创建一个类,显然不现实。但是如果我们把每一种饮品...原创 2018-03-25 14:43:15 · 769 阅读 · 0 评论 -
重学设计模式(四)—— 原型模式
前言Prototype原型模式是一种创建型设计模式,它允许一个对象再创建另外一个可定制的对象。 Java Object中已经提供了一个Clone( )方法,但是要实现原型模式,必须实现Cloneable接口,使用Cloneable接口都不用导入包。克隆一个对象有两种方式:浅克隆:copy该对象,然后保留该对象原有的引用。也就是说不克隆该对象的属性。深克隆:copy该对象,并且...原创 2018-03-17 21:17:09 · 161 阅读 · 0 评论 -
重学设计模式(三)—— 构造器模式
在实际开发过程中,我们一般通过构造方法将参数传入一般的实体类,而且实体类的构造方法可能不止一个,当参数个数过多时,伴随而来的是构造方法数量的上升,过多的构造方法参数往往给用户带来一种不明就里的感觉。构造器模式的出现很好的解决了多参数初始化的问题。假设我们需要编写一个Student类,此类含有四个属性,代码如下:public class Student { private Strin...原创 2018-03-14 00:20:43 · 207 阅读 · 0 评论 -
重学设计模式(二)—— 单例模式
单例模式,顾名思义,就是确保一个类只有一个实例,并提供一个全局访问点。public class BasicSingleton { private static BasicSingleton instance; private BasicSingleton(){} public static BasicSingleton getInstance(){ ...原创 2018-03-09 01:05:37 · 202 阅读 · 0 评论 -
重学设计模式(一)—— 简单工厂、工厂方法、抽象工厂
前言谈起模式一词,很多情况下笔者都认为是一个偏向贬义的词汇,代表着冥顽不灵,一成不变。细数这些年开发过程中走过的弯路后,笔者觉得设计模式真是个好东西。时代发展如此之快,我们不可能设计出一个完美的系统,但是我们可以参考一些过去的经验,少走弯路,在系统的健壮性、可扩展性上多做思考,这绝对有益于我们的系统。为此,笔者抽时间重新学习了一下设计模式,此系列文章算是学习心得吧。简单工厂简单工厂模式...原创 2018-03-08 23:44:51 · 223 阅读 · 0 评论