设计模式这个东西,永远不是单单从书本上就能获取到的东西.曾经看到一个比喻,比喻的就很巧妙,文艺复兴时期的教学方式,那时候诞生了很多巨匠,达芬奇,莫开朗基罗,拉斐尔都是在这个时期绽放光芒的巨星.有一种说法是当时的教学方式和今天的不同,那时候采取的是小作坊中师徒相授,口耳相传的方式来实现知识的传递,但是,在当下的如今,这种学习方式已然被世人所遗忘.

经济学上个世纪有一句话真的很有道理,反对黑板上的经济学,但是现在...我们是否依然在黑板上呢.

先随便聊聊吧,相对于代码开发过程中,重构的过程其实更加有趣,因为总有一种化腐朽于神奇的感觉,有一种智力上的优越感.

记得以前,学习设计模式是通过闫宏博士的"java与模式"一书中粗略地了解,但是越到代码开发阶段,其中的想法就越深入人心.一如既往,我并不希望罗列案例,我依然希望透过现象看本质,为什么通过这样那样的设计模式能够提高的代码的复用率,能够让我们在代码维护阶段能够更省力并且不会顾此失彼,改掉一个bug又出现一个新的bug.

1.策略模式:定义的方法族,分别封装起来.让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户.

该模式主要为开闭原则服务,为了让已经封装好的类不再被人反复鞭尸,所以需要把变化的部分(常常为随着需求变化的行为)进行封装.

首先定义特征接口,将变化的行为使用重构的方法先进行分类,将方法和方法解耦,由此分离出多个不同的行为.为每个行为定义一个抽象的接口或抽象类,这里使用接口或许更加合适,毕竟java是基于单继承模型的这样一种语言.

在类的初始化的时候,将实例化的接口传入,在需要执行行为的时候使用接口所定义的方法,策略模式就完成了.

2.观察者模式:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖他的对象都会接到通知

主要目的是为了解耦,关键两个接口为Observable和Observer,分别对应订阅者和被订阅者.

核心思想是Observer中定义了响应Observable中监控的对象变化时,Observer所执行的响应方法.Observable通过List之类的数据结构来管理订阅的Observer列表.

3.装饰者模式:动态地将责任附加到对象上.想要扩展功能,装饰者提供有别于继承的另一种选择.

这个模式和继承有着很微妙的孽缘,举个例子吧:你进到一家奶茶店里面去买奶茶,那么问题来了,奶茶店里到底该如何管理各种配方的类呢?这里正常人会想到两个方案,

一.使用继承的方式,在父类中添加两个方法,获取组成成分和获取价格,然后让子类去实现他们.这样的方法会出现以下问题:

类爆炸,每一种配方都需要特地去添加一个全新的类,到最后会按照排列组合的数据增长速度来增加类的个数,类的"空间复杂度         过高"

二.存在一堆行为的重复逻辑,这部分逻辑不能很好的复用所以一旦逻辑出现问题,就会导致项目的大幅度改动

基于此,装饰者模式提供了一个全新的思路,也就是继承的另外一个使用手法,通过同时使用"组合和继承"的方式实现"配方的复用问题",也就是基于已经实现的装饰来进一步实现下一步装饰操作.

isA和hasA真的是很得当的比喻.

4.简单工厂模式(静态工厂模式):

简单工厂模式是通过在类中定义静态方法的方式进行类的创建过程,当然,因为是使用静态方法的原因,就缺乏了多态和继承的拓展性。但是这种方法真的很直观,而且在很多场合下,并不非要使用继承的方式来构造项目,割鸡焉用牛刀呢。

5.工厂方法模式和抽象工厂模式,这两个设计模式因为名称挺像,所以很容易弄混的样子

工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟刀子类。

常常听到其他开发人员说:工厂方法让子类决定要实例化的类是哪一个。所谓的“决定”,并不是指模式允许子类本身在运行时做决定,而是指在编写创建者时不需要知道实际创建的产品是哪一个。选择使用了哪一个子类,自然就决定了实际创建的产品是什么。

抽象工厂模式:定义了一个接口,用于创建爱你相关或依赖对象的家族,而不需要明确指定具体类。

这两个类其实最大的区别就是工厂方法模式更关心具体的产品的创建,但是抽象工厂模式更关心工厂的构成和结构。而且往往抽象工厂的继承树和实际的产品树有几分神似。

设计模式-策略模式,观察者模式,装饰者模式,静态工厂模式,工厂方法模式相关推荐

  1. java与模式孙悟空_悟空模式-java-工厂方法模式

    [却说那七衣仙女自受了大圣的定身法术,一周天方能解脱,各提花篮,回奏王母说道:"齐天大圣使术法困住我等,故此来迟."王母问道:"汝等摘了多少蟠桃?"仙女道:&q ...

  2. 设计模式--常用8个设计模式 单例-策略-责任链-装饰者-迭代器模式-观察者模式-常用设计模式

    1创建型的设计模式-主要有单例模式和工厂模式 对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题 2结构型的设计模式-主要有代理模式和适配 ...

  3. Java进阶专题(八) 设计模式之适配器模式、装饰者模式、观察者模式

    本章节将介绍:三个设计模式,适配器模式.装饰者模式和观察者模式.通过学习适配器模式,可以优雅的解决代码功能的兼容问题.另外有重构需求的人群一定需要掌握装饰者模式.本章节参考资料书籍<Spring ...

  4. 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)

    一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...

  5. 设计模式、原则、饿汉式单例模式、抽象工厂、代理模式、观察者模式、模板方法模式使用场景

    设计模式 ​ 对各种面向对象方法的一种总结.前辈们遇到了好多设计问题,然后利用面向对象解决了.然后他们把解决方案汇总起来,形成了20多种设计模式.它可以有效的帮助我们利用面向对象,来提高代码的复用性. ...

  6. 精讲23种设计模式-策略模式~聚合短信服务和聚合支付服务

    文章目录 一.设计模式 1. 为什么需要使用设计模式 2. 设计模式的分类 3. 什么是策略模式 4. 为什么叫做策略模式 5. 策略模式优缺点 6. 策略模式应用场景 7. Spring框架中使用的 ...

  7. 设计模式 | 策略模式及典型应用

    本文的主要内容: 介绍策略模式 示例 商场购物打折策略的实现 策略模式总结 源码分析策略模式的典型应用 Java Comparator 中的策略模式 Spring Resource 中的策略模式 Sp ...

  8. 吃透设计模式第六篇-装饰者模式

    设计模式的重要性对于程序员来说,相当于盾牌对于美国队长,暴风战斧相对于雷神,内裤对于绿巨人(绿巨人最强武器,手动狗头)来说,是必不可少的. 在此,特别总结下23钟设计模式: 创建型模式:单例模式.抽象 ...

  9. 《设计模式详解》行为型模式 - 观察者模式

    观察者模式 6.6 观察者模式 6.6.1 概述 6.6.2 结构 6.6.3 案例实现 6.6.4 优缺点 6.6.5 使用场景 6.6.6 JDK 提供的实现 - Observable 示例 完整 ...

最新文章

  1. oracle时间戳找回数据库,【备份恢复】 闪回数据库(三) 基于时间戳闪回数据库...
  2. 坦克大战java_java版坦克大战游戏源码
  3. 与班尼特·胡迪一起找简单规律(HZOJ-2262)
  4. 共克时艰:科技助力湖北地区银行业务线上转型
  5. fastdfs redis java,大文件上传_断点续传_文件分片传输_fastdfs_前后端一站式解决方案...
  6. am335x gpio驱动
  7. IDEA+Maven:cannot download sources
  8. 跨境电子商务独立站如何找到热门的利基市场
  9. 错过了秋天的第一杯奶茶,不要错过秋天第一场黑客松
  10. 【面经】我是如何优雅的跳槽的?
  11. 调通sina33下的AP6212A0(WIFI+BT)V1.2
  12. 毕设不要慌,论文写作法
  13. 用matlab求excel表中平均值,matlab如何将符合特定条件的数据导入excel并求出平均值...
  14. 造成错误“ORA-12547: TNS:lost contact”的常见原因有哪些?
  15. 杰理AC632N蓝牙芯片iokey使用解析(通用MCU版)
  16. 淘宝数据集分析+可视化
  17. 浅谈估值模型:实现GGM的理想国(附代码)
  18. 对2030年的人工智能的预测#AIGC的机会到底在何处?
  19. 计算机专业29岁博士毕业,已经29岁了想去读博士晚不晚?
  20. 【应急基础】————2、开机启动项

热门文章

  1. Spring框架入门
  2. 2017-07-18日看登录日志,显示十条:最早的是:2014-04-07 17:09,应该就是注册日期吧
  3. macbook可以装linux,怎样给老旧的 MacBook 安装 Linux
  4. java类定义的顺序_Java类及对象的初始化顺序
  5. 油管螺纹尺寸对照表_数控加工过程中,如何区分新旧螺纹牌号?
  6. tp3.2.3权限控制二之后台管理部分,及菜单栏目显示问题
  7. Hbuilder实用技巧
  8. 【深度学习】计算机视觉相关技术探索(一)
  9. 【深度学习】Tensorflow搭建卷积神经网络实现情绪识别
  10. 【深度学习入门到精通系列】对抗样本和对抗网络