《HeadFirts设计模式》笔记

定义

在某种情境下,针对某些问题的某种解决方案。

设计模式

1.可拓展性强,方便维护,能够应付变化。

何时使用设计模式

设计之前,还有在重构的时候。

OOP

可复用,可扩充,可维护

设计模式原则

1.封装变化。

找出可能需要变化的部分,独立出来。

2.面向接口编程。
这里的“接口”实际指的是“超类型”,比如接口,或者抽象类。

用接口声明,用具体的实现类实例化。

针对接口,通过多态,新类可以实现接口。通过接口编程,可以隔离掉以后系统可能发生的一堆变化。

3.多用组合,少用继承。

组合是has-a,而继承是is-a。

利用继承设计子类的行为,是在编译时静态决定的,而且所有的子类都会继承到相同的行为。因此,使用组合的做法拓展对象的行为,可以在运行时动态地拓展。

4.交互对象之间要松耦合。

5.类应该对拓展开放,对修改关闭。

继承

优点:代码复用。子类可以调用父类的方法及属性。

缺点:
1.利用继承设计子类的行为,是在编译时静态决定的。难以支持多种变化的行为(方法)。

2.子类不得不拥有父类的所有方法属性。所有子类都会继承到相同的行为。

3.如果对父类的方法做了修改的话(比如增加了一个参数),则子类的方法必须做出相应的修改。所以说子类与父类是一种高耦合,违背了面向对象思想。

图形:一般用三角形加上实线表示。

接口

优点:支持变化,有多种实现类。

缺点:代码无法复用。

图形:用三角形加上虚线表示

组合

组合:表示Has-A,有一个。可以通过构造器,setter注入对象。

图形:用箭头表示。

多态

设计模式分类

创建型、行为型、结构型。

行为型:涉及到类和对象如何交互及分配职责。

结构型:可以把类或对象组合到更大的结构中。

观察者模式

1.一个主题(SubSubject)对应多个观察者(Observer)。

2.主题可以添加观察者,也可以移除观察者。

3.java内置了观察者模式,有Observer接口和Observable类(被观察者,就是主题类),Observable类带有可以添加和移除观察者的方法。

4.观察者模式分为“推”和“拉”两种模式。

装饰器模式

1.可以动态地将功能附加到对象上。

2.装饰者和被装饰者具有相同的超类型。

3.装饰器模式举例:奶茶。有珍珠奶茶,椰果奶茶,抹茶,绿茶,还可以加冰,加热等等。可以用装饰器模式。

4.java.io中使用了大量的装饰器模式。

装饰者和被装饰者都继承了InInputStreStream。

装饰者:FilteInputStream是一个抽象装饰者,继承了InputStream。而其他装饰者继承FilterInputStream。

常见的被装饰者有FileInputStream,BytrArrayInputStream。

待补充

思考

继承也可以增强功能,为什么不用继承而使用装饰器模式?

解答:通过继承增强功能,需要写大量功能组合的类。比如功能A,B,C,D,就需要写AB,AC,AD,BC,ABC等等数不清的类。

posted on   乐之者v  阅读(164)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2018-11-14 Redis集群架构【转载】
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示