设计模式笔记
来源:互联网 发布:刚开淘宝店铺卖什么好 编辑:程序博客网 时间:2024/05/16 12:41
- 背景
- 疑难点笔记
- 1装饰模式
- 2 简单工厂模式
- 3工厂方法模式
- 4抽象工厂模式
- 5 策略模式
- 6代理模式
- 7 原型模式
1 背景
我其实一直不太重视设计模式,感觉一切的模式都是面向对象的基础语法支撑起来的,截止目前我还是认为只要理解了java的语法,就能找到解决问题的方法。比如单例模式是静态类的存储特性的最好应用,代理模式是多形性的应用。并且android有google这个伟大的巨人给我们源码。一切的设计模式我感觉都有体现,虽说心中带有很多质疑,但是我还是开始我的设置模式学习之旅。本次学习是参考了《大话设计模式》》这本书。
疑难点笔记
这里只要是我的自己的笔记,以后如果有时间,我可能会整理这部分内容,但是目前我这里仅仅是记录自己感觉奇怪的模式。
2.1装饰模式
装饰模式是动态的给一个类添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。
在我看来,装饰模式有点类似递归调用,装饰模式结构图如下图:
ConcreteComponent这个类类似于递归调用的最开始的一个值。decorator的子类也就是真正的装饰实体类concrectdecorator,也就是在这些类里面灵活的增加功能。这里是具有自己的一个句柄参数的方法。从而concrectdecorator具有了conponent的一个句柄。若是再次调用concrectdecorator的特定的方法。会获得上个concrectdecorator的一个对象。有点类似c的链表结构。最终结构如下图
从这个图中我们很容易知道这里最重要的两个元素concreatecompoent和concretedectorator。其他都可以省略。但是这里面对一个问题。decorator的特定方法必须接受自己的句柄。并且最终的目的是方便调用根的operation()方法。所以一般来说这里的几个元素都不可或缺。当conreatecompoent属于decortor,这里我们可以看成是省略了compoent或者是dectorator,关系图如下
目前我没想到这个模式的主要针对的问题空间。以后补充。
2.2 简单工厂模式
按需产生类,也就是判断语句的变种。更加的面向对象,可以产生面向对象的变成代码,使代码清晰。但是呢,这个玩意面对扩展,就稍显麻烦了,对扩展支持不友好。若是想添加一个类,就要改变工厂类代码。
ps:为啥方法工厂里面都用静态方法。根本没啥特别的好处。除了不用new实例,直接调用。2ps这里放回多个实例。静态代码区产生新的对象,并且是我们具有新的对象的引用,基本类似c++的内联函数产生新的对象。这里没啥特别的。
2.3工厂方法模式
这个玩意其实就是通过中间类产生一个类的实例。别人都说可以实现对类的添加而不影响工程。实现了开闭原则,但是我不理解。wtf!!为毛你不直接new出来一个呢??结构图如下:
这里就不管了。
ps可能有些实例的创建比较复杂感觉可以用!!
2.4抽象工厂模式
工厂变成一个抽象类。可以产生一个product的一系类的产品的的类。和工厂方法差不多,就是功能稍微强大点。
2.5 策略模式
他定义了算法家族,分别封装起来。让他们直接相互替换。我感觉有点像简单工厂模式,这里都是为了封装。
封装代码。简化客户端。
2.6代理模式
为其他对象提供一种代理,以控制这个对象。结构图如下:
其实也就是封装,代理类控制真正的目标类,这里主要用于远程管理,与大文件加载或者耗时操作等。
2.7 原型模式
用原型实例指定创建对象的种类。并且通过拷贝这些原型创建新的对象。
- 设计模式.笔记.外观模式
- 设计模式 笔记 观察者模式
- 设计模式笔记--策略模式
- 设计模式笔记--代理模式
- 设计模式笔记--观察者模式
- 《设计模式》笔记:状态模式
- 《设计模式》笔记: 访问者模式
- 设计模式笔记-工厂模式
- 设计模式笔记-原型模式
- 设计模式笔记-创建者模式
- 设计模式笔记-适配器模式
- 设计模式笔记-外观模式
- 设计模式笔记-代理模式
- 设计模式笔记-组合模式
- 设计模式笔记-桥模式
- 设计模式笔记-策略模式
- 设计模式笔记-迭代器模式
- 设计模式笔记-模板模式
- java中的闭包
- Weblogic注册为Windows的系统服务项+删除服务项
- windows DOS环境下看星球大战
- Android的一些编码规范和优化
- POS机验证流程
- 设计模式笔记
- MR-5.MapReduce分布式缓存(Distribute Cache)
- Swift传值传的是什么
- 如何解决C/C++中stack overflow问题
- MR-5.MapReduce排序
- java火车站售票系统之多线程并发访问
- Qt之进程间通信(Windows消息)
- MR-5.MapReduce常见Joins方法
- leetcode之Summary Ranges