``推荐使用 wiki 食用更香``[lvgocc/java-design-patterns/wiki](lvgocc/java-design-patterns/wiki)
原创声明:除设计模式背景或概念性内容外,其余全部内容均为自己深入理解原创输出,希望能够得到你支持的 star ⭐
# 设计模式(Java实现)
设计模式专题,共 23 种设计模式。每种设计模式均从根本出发,深入理解设计思想,再配合一些小故事加以理解,让设计模式变得通俗易懂。让自己和现在正在阅读的你,能够知其然而知其所以然。
- 提到单例想到 “饿汉?,懒汉?”
- 提到工厂想到 “汽车?”
- 提到抽象工厂想到 “一个大的工厂?“
- 提到适配器想到 “插头?USB?”
如果是,我相信这里很适合你阅读学习。设计模式学了不会用?可以看两篇试一试,同样的知识,不一样的“味道”。
"每一篇...(突然被打断)"
“don't talk, show me see see”
"好的大哥,这就安排!"
- [x] [1. 单例模式: 资源!要合理的分配使用!](lvgocc/java-design-patterns/tree/main/singleton)
- [x] [2. 原型模式:啥?盗图、盗文章的人居然用的是一种设计模式!原型模式?](lvgocc/java-design-patterns/tree/main/prototype)
- [x] [3. 工厂模式:像工厂一样创建对象,让业务代码更专注!](lvgocc/java-design-patterns/tree/main/factory)
- [x] [4. 抽象工厂模式:抽象工厂模式和工厂模式有区别吗?](lvgocc/java-design-patterns/tree/main/abstract-factory)
- [x] [5. 建造者模式:学个设计模式还和人生扯上关系了?](lvgocc/java-design-patterns/tree/main/build)
- [x] [6. 代理模式:有什么问题跟我律师说吧!](lvgocc/java-design-patterns/tree/main/proxy)
- [x] [7. 装饰者模式:玩了把坦克大战居然彻底搞懂了装饰者模式!](lvgocc/java-design-patterns/tree/main/decorator)
- [x] [8. 桥接模式:这个不常用的设计模式居然被我学的最透,草率了!](lvgocc/java-design-patterns/tree/main/bridge)
- [x] [9. 适配器模式:今天轻松点,就说说什么是“榫”,什么是“卯”,什么是“榫卯”!](lvgocc/java-design-patterns/tree/main/adapter)
- [x] [10. 外观模式:书生的家书是谁送的?书童到底是个什么角色?](lvgocc/java-design-patterns/tree/main/facade)
- [x] [11. 享元模式:如果让你开发英雄联盟的兵线,你会怎么设计?](lvgocc/java-design-patterns/tree/main/flyweight)
- [x] [12. 组合模式:使用组合模式做一个简单的推荐功能](lvgocc/java-design-patterns/tree/main/composite)
- [x] [13. 策略模式:学习JDK的比较器架构是如何设计的](lvgocc/java-design-patterns/tree/main/strategy)
- [x] [14. 模板方法模式:你知道AQS它是干什么的吧,那这个框架是怎么设计的呢?](lvgocc/java-design-patterns/tree/main/template-method)
- [x] [15. 观察者模式:原来观察者模式是JDK与生俱来的](lvgocc/java-design-patterns/tree/main/observer)
- [x] [16. 责任链模式:“张三为了纪念王二请假的悲催经历想出来的一种设计模式”](lvgocc/java-design-patterns/tree/main/chain-of-responsibility)
- [x] [17. 备忘录模式:这款游戏你玩过吗?是不是经常”重来“?](lvgocc/java-design-patterns/tree/main/memento)
- [x] [18. 迭代器模式:你真的“会”遍历list吗?](lvgocc/java-design-patterns/tree/main/iterator)
- [x] [19. 命令模式:如果把请求变成一个对象,在一些场景更好用!](lvgocc/java-design-patterns/tree/main/command)
- [x] [20. 状态模式:从工作状态,再到订单状态一点点深入学习状态模式](lvgocc/java-design-patterns/tree/main/state)
- [x] [21. 中介者模式:还记得你到单位入职的第一天吗?你有没有遇到文中‘王二’的事呢?](lvgocc/java-design-patterns/tree/main/mediator)
- [x] [22. 访问者模式:是“凡尔赛”让我“认清”了解释器模式:你能看懂TA的“眼色”吗?访问者模式!](lvgocc/java-design-patterns/tree/main/visitor)
- [x] [23. 解释器模式:你能看懂TA的“眼色”吗?](lvgocc/java-design-patterns/tree/main/interpreter)
每一篇都有对应的文章配合源码学习,文章通俗易懂。以学渣的姿态来学习学霸的知识,我不善搞深奥的东西,但喜欢将深奥的东西变成简单的东西,我深信复杂度守恒定律,我也相信讲出来的东西是为了让大家能听懂而不是自己秀知识储备而已。听懂掌声。
# 软件设计模式背景
>当我们要学习一门技术或者一类知识的时候,先去了解学习它的背景,会对我们接下来的学习和理解产生一些潜移默化的影响和帮助
这个背景千篇一律,事实就是如此。我用自己的话在总结一下。
## “设计模式”最初的提出,是在建筑领域。🌉
1977 年被美国的建筑大师🕍 克里斯托夫·亚历山大 (Christopher Alexander)在他的著作📕《建筑模式语言:城镇、建筑、构造(A Pattern Language: Towns Building Construction)中描述了一些常见的建筑设计问题,并提出了一系列的解决方案, 至此称为模式。
2年后,1979年,克里斯托夫·亚历山大 在他的另一本著作📙《建筑的永恒之道》(The Timeless Way of Building)进一步强化了设计模式的思想。
直到 1990 年,也就是 13 年后。设计模式一词才到了软件工程界,同时为此开辟了专题研讨会。
## GOF👨🦲👦👨🧑
在“设计模式”进入软件行业后的第5年,也就是 1995 年,艾瑞克·伽马(ErichGamma)👨🦲、理査德·海尔姆(Richard Helm)👦、拉尔夫·约翰森(Ralph Johnson)👨、约翰·威利斯迪斯(John Vlissides)🧑等 4 位作者合作出版了📘《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)一书。
从此掀起了软件工程界的“设计模式”浪潮,使越来越多的开发者受益,同时涌现出了越来越多的设计模式。而这 4 位作者在软件领域小组名称 Gang of Four 四人组(四人帮),后来设计模式也以此匿名著称 GOF。
![gof](https://i.loli.net/2020/10/08/CHaE8bzvX4fScYA.jpg)
## 设计模式要做的事情
现如今的设计模式可远不止笔者这里收录整理学习的 23 种,而要比这多太多太多,但这么多的设计模式希望做的事情确实相同的。都是为了能够被反复利用,解决不断重复出现的问题而存在的,就像当初 GOF 写的那本书一样,‘可复用面向对象的基础’。
一种方法,解决n种问题。这就是模式,它要解决的,就是拥有共性的问题。
# 设计模式基本原则
> 基本原则摘自 http://c.biancheng.net/design_pattern/
当问题的解决方案有很多时,该怎么权衡哪一个方案可以成为是模式呢?这就有了原则性的约束。为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,我们应当要尽量根据 **⑦** 条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。
- 1️⃣ 开闭原则 OCP , 1988 年 勃兰特·梅耶(Bertrand Meyer)在其著作《面向对象软件构造》📕中提出 :<u>软件实体应当对扩展开放,对修改关闭</u>。
- 2️⃣ 里式替换原则 LSP ,1987 年 里斯科夫(Liskov)女士👩🦰 的“面向对象技术的高峰会议”(OOPSLA)上发表的一篇文章《数据抽象和层次》📜提出:<u>继承必须确保超类所拥有的性质在子类中仍然成立</u>。
- 3️⃣ 依赖倒置原则 DIP ,1996 年 Object Mentor 公司总裁罗伯特·马丁(Robert C.Martin)🧑在C++ Report 上发表的文章 :高层模块不应该依赖�
没有合适的资源?快使用搜索试试~ 我知道了~
设计模式专题,共 23 种设计模式。GOF design patter-java-design-patterns.zip
共446个文件
java:216个
png:149个
md:29个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 117 浏览量
2024-01-31
20:28:22
上传
评论
收藏 81.33MB ZIP 举报
温馨提示
设计模式专题,共 23 种设计模式。GOF design patter-java-design-patterns
资源推荐
资源详情
资源评论
收起资源包目录
设计模式专题,共 23 种设计模式。GOF design patter-java-design-patterns.zip (446个子文件)
run.bat 255B
timg.gif 1.03MB
abstract-factory00.gif 14KB
.gitignore 311B
AppetizerTest.java 4KB
DelayLoadSingleton1Test.java 3KB
ArraysUtil.java 3KB
DelayLoadSingleton2Test.java 3KB
GameMementoOriginatorTest.java 2KB
StraightwaySingletonTest.java 2KB
InnerClassSingletonTest.java 2KB
Appetizer.java 2KB
TestJDKComparator.java 2KB
DCLSingleton.java 2KB
MutexLock.java 2KB
DCLSingletonTest.java 2KB
EnumIvoryTowerTest.java 2KB
GameMementoOriginator.java 2KB
InnerClassSingleton.java 2KB
DecisionCompositeTest.java 2KB
DecisionComponent.java 2KB
Versailles.java 1KB
OOPWork.java 1KB
GameMementoTest.java 1KB
DecisionResult.java 1KB
DelayLoadSingleton2.java 1KB
PlayerRole.java 1KB
PlayerRole.java 1KB
TankDecoratorTest.java 1KB
ArmsFactory.java 1KB
GameMemento.java 1KB
UserMapperTest.java 1KB
Graphics.java 1KB
ProducerTest.java 1KB
ArmsFactoryTest.java 1KB
GameMemento.java 1KB
CircularFactory.java 1KB
HR.java 1KB
BlueArmsFactory.java 1KB
DateUtil.java 1KB
RedArmsFactory.java 1KB
MutexLockTest.java 1KB
Work.java 1KB
FiveTiaoRen.java 1KB
GameMementoCaretaker.java 1KB
ContextTest.java 1KB
Composite.java 1KB
Tank.java 1015B
DelayLoadSingleton1.java 1002B
ProducerTest.java 997B
Working.java 995B
User.java 956B
Producer.java 928B
DecisionAgeAmong30and40.java 908B
DecisionAgeAmong20and30.java 908B
ShuTong.java 885B
DecisionGenderFeMale.java 879B
DecisionGenderMale.java 874B
DecisionAgeThan40.java 874B
DecisionAgeLess20.java 872B
RectangleFactory.java 870B
AbstractHandlerTest.java 858B
Word.java 849B
WangErRenting.java 844B
DecisionComposite.java 844B
Component.java 844B
I.java 830B
AbstractGraphicalFactoryTest.java 822B
AbstractHandler.java 822B
StraightwaySingleton.java 807B
BuilderTest.java 804B
Leaf.java 796B
TriangleFactory.java 792B
ThemeTest.java 791B
EveningState.java 787B
WorkingTest.java 787B
HRTest.java 779B
GameMementoOriginator.java 760B
WangErRentingTest.java 760B
GraphicsTest.java 754B
VisitorTest.java 749B
ShuSheng.java 743B
AbstractFactoryTest.java 742B
SLFJLog.java 734B
MyFriend.java 728B
You.java 718B
GraphicalFactoryTest.java 699B
GraphicalFactory.java 698B
WordTest.java 693B
Arms.java 677B
Director.java 676B
LaoFuQin.java 667B
PlayerRoleBuilder.java 653B
ChengMen.java 651B
EnumIvoryTower.java 650B
Client.java 644B
Wife.java 638B
Context.java 637B
Consumer1.java 635B
Consumer2.java 635B
共 446 条
- 1
- 2
- 3
- 4
- 5
资源评论
武昌库里写JAVA
- 粉丝: 3136
- 资源: 1872
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功