
设计模式
qq_20009015
欢迎关注我的公众号《程序员与王子喵》
展开
-
使用抽象类和接口聚合方法
接口该接口定义了process处理逻辑 和一个返回类型的方法在process处理逻辑里面,大部分实现该接口方法 都会有一个发送mq通知的需求因此定义了一个抽象基类定义了业务处理方法和通知方法。 已经重写了process方法,这样在调用process方法的时候,就会去调用handler和notify最后在子类里面,再去实现抽象的handler和notify方法。那为什么不一开始就在接...原创 2019-03-14 11:34:03 · 505 阅读 · 0 评论 -
模版方法模式
模版方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以不改变一个算法的结果即可重定义该算法的某些特定步骤。比如说:要输入一个excel文件, 然后需要对该文件内容进行校验,校验完成之后 插入数据库。算法的步骤就是: 校验->落库但是不同的文件,里面的数据不同,比如说订单的线下数据excel, 款项的线下的数据excel 等等,这样的话 校验的逻辑不...原创 2019-06-11 23:24:12 · 242 阅读 · 0 评论 -
原型模式(深拷贝以及浅拷贝)
原型模式:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。原型模式就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。通俗的来说,就是对象自身提供clone方法,用于克隆一份对象给其他方使用。好处就是,如果构造函数和初始化过程 非常的复杂的时候,创建对象代价非常大的时候,使用这种模式 可以很方便。一般在初始化信息不发生变化的情况下,克隆是最好的办法隐藏...原创 2019-06-11 22:56:23 · 995 阅读 · 0 评论 -
工厂方法模式
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 工厂方法使一个类的实例化延迟到其子类。工厂方法模式是简单工厂模式的进一步抽象和推广,封装了对象的创建过程,使得更换对象时,不需要做大的改动即可实现,降低了客户程序与产品对象的耦合。产品public interface Product { void operator();}工厂public inte...原创 2019-06-11 09:58:58 · 198 阅读 · 0 评论 -
代理模式
代理模式:为其他对象提供一种代理以控制对这个对象的访问。代理模式的应用:1.远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。比如说dubbo的服务提供者代理,在消费者去远程调用服务提供者的时候,实际上是调用的提供者在本地的代理,由代理再去访问远程服务。2.虚拟代理,性能优化的一种方式,比如说某个对象的创建需要花很长时间,这样的对...原创 2019-06-11 08:45:25 · 198 阅读 · 1 评论 -
装饰者模式
装饰者模式: 动态的给对象添加一些额外的职责,就增加功能来说,装饰者模式比生成子类更灵活。比如说,在不使用装饰者模式的情况下,我要给人添加装扮。定义一个Person类,一个Wear类, Person类里面定义一个Wear属性,然后Wear类里面定义上衣,裤子,鞋子等属性。但是这样写的话,将来要新增腰带,帽子等衣服的时候,就要去改原来的Wear类,会影响到其他已经被创建了类和对象,违背了开闭原...原创 2019-06-10 17:45:41 · 236 阅读 · 0 评论 -
单一职责原则、开放封闭原则、依赖倒转原则、里氏代换原则、迪米特法则、合成/聚合复用原则
1.单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责太多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。 比如业务操作和日志记录类进行分开,界面和逻辑分开等等。职责分离,单一职责,更有利于维护和拓展。2.开放-封闭原则:类,模块,函数等等,应该可以拓展,但是不可以修改。也就是:对于拓展是开放的,对于更改是封闭...原创 2019-06-09 20:53:47 · 652 阅读 · 0 评论 -
策略模式详解以及在spring中策略模式的两种简化应用
策略模式,同样可以消除掉繁杂的if else ,那么它和简单工厂模式的区别在哪?简单工厂模式是根据传入的参数返回不同的产品,不同的产品内部封装了不同的逻辑。策略模式类似,但是策略模式内部是封装了算法,也就是封装了某一种策略。举个例子,超市活动打折优惠,1.普通计费。 2.满300减20 3.满400减80 4.满500打八折如果用简单工厂模式,那么需要定义四个产品子类,如果将来又新增了...原创 2019-06-09 19:06:42 · 7421 阅读 · 0 评论 -
简单工厂模式
这种模式可以极大的消除掉if else比如说 我们要设计一个计算器 ,需要支持+ - x 三种运算 ,但是后续要考虑拓展除法运算如果直接常规写法 if('+'){...} if('-'){...} if('x'){...} 每一个类型后面跟一段代码,如果后续有了新的要拓展的,就继续往里面加。等这个计算器功能越来越强大,代码也会堆积的越来越多。使用简单工厂模式,实际上是利用面向对...原创 2019-06-06 23:36:23 · 257 阅读 · 0 评论 -
使用Builder模式创建复杂可选参数对象
在新建对象时,若需要对大量可选参数进行赋值,最常见的做法是JavaBeans模式,即调用一个无参构造方法创建对象,然后调用setter方法来设置每个必要的参数,以及每个相关的可选参数这种模式需要的代码语句繁琐,而且这种做法阻止了把类做成不可变的可能(不可变的类没有set方法,且创建之后没有任何可以更改属性的方法)。更加简洁的一种方式是通过多个构造方法去新建对象。但是这样,就会有多个不同的构造方...原创 2019-04-29 15:03:17 · 1302 阅读 · 0 评论 -
单例模式
package offerword.singleton_1;/** * @ClassName singleton * @Author laixiaoxing * @Date 2019/3/31 上午9:35 * @Description 单例模式 * 用途:比如说一个大对象,且基本不会更新的,只需要有一个就可以满足应用需求的,创建多个则浪费了空间 * 例子1 spring里面将be...原创 2019-03-31 12:34:56 · 223 阅读 · 0 评论 -
使用策略模式消除if else
最近项目中遇到如下情况:有一个操作叫平帐,然后要对多个不同的款项进行平帐,目测有72种。然后平帐的方法只有一个,在那个平帐方法里面,判断是哪一种款项,然后不同的款项有不同的处理逻辑。if(款项A){款项A的处理方法;}if(款项B){款项B的处理方法;}if(款项C){款项C的处理方法;}…这个就很可怕了。因此使用策略模式来消除掉if else。先看使用策略模式之后的...原创 2019-03-13 16:57:07 · 16601 阅读 · 16 评论 -
外观模式(门面模式)
外观模式(facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。其实就是对内部诸多接口进行一个封装,提供一个简单的接口给外部调用。比如说某个系统中,完成一件事要依次调用接口A,接口B,接口C等等,步骤非常繁杂。那么可以定义一个新的接口,将这些步骤都封装到内部。 外部系统直接调这个新的接口就行了。新增一个facade接口,可...原创 2019-06-12 09:45:04 · 676 阅读 · 0 评论