From 5547a7ccf2f7fac49212b8180c0761177df57e52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E7=A5=A5?= <1366971433@qq.com> Date: Wed, 11 Dec 2019 11:27:19 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/Java_设计模式.md | 105 +++++++++++++++++++++++++++++++------ 1 file changed, 89 insertions(+), 16 deletions(-) diff --git a/notes/Java_设计模式.md b/notes/Java_设计模式.md index 203f0f6..9e0904f 100644 --- a/notes/Java_设计模式.md +++ b/notes/Java_设计模式.md @@ -1,5 +1,46 @@ # 设计模式 + + + + + + ## 软件设计的原则 ### 1. 开闭原则 @@ -392,7 +433,9 @@ Exception in thread "main" java.lang.IllegalArgumentException: Cannot reflective ### 2.2 示例 -![23_simple_factory](../pictures/23_simple_factory.png) +
+ + 产品抽象类: @@ -471,7 +514,9 @@ public Phone getPhone(Class phoneClass) { ### 3.2 示例 -![23_factory_method](../pictures/23_factory_method.png) +
+ + 产品抽象类: @@ -552,7 +597,9 @@ public class ZTest { ### 4.2 示例 -![23_abstract_factory](../pictures/23_abstract_factory.png) +
+ + 充电器抽象类: @@ -644,7 +691,9 @@ public class ZTest { ### 5.2 示例 -![23_builder](../pictures/23_builder.png) +
+ + 产品实体类: @@ -986,7 +1035,9 @@ service.compute(); 将 220V 的电流通过适配器转换为对应规格的电流给手机充电: -![23_adapter](..\pictures\23_adapter.png) +
+ + 电源类: @@ -1059,7 +1110,9 @@ public class ZTest { 将一个图形的形状和颜色进行分离,从而可以通过组合来实现的不同的效果: -![23_bridge](..\pictures\23_bridge.png) +
+ + 颜色的抽象和实现: @@ -1152,7 +1205,9 @@ new Round().setColor(new Yellow()).getDesc(); 模拟 Linux 文件系统: -![23_composite](..\pictures\23_composite.png) +
+ + 组件类,定义文件夹和文件的所有操作: @@ -1279,7 +1334,9 @@ nginx.cat(); 在购买手机后,你可能还会购买屏幕保护膜,手机壳等来进行装饰: -![23_decorator](..\pictures\23_decorator.png) +
+ + 手机抽象类及其实现: @@ -1398,7 +1455,9 @@ public class ZTest { 模仿电商购物下单,此时内部需要调用支付子系统,仓储子系统,物流子系统,而这些细节对用户都是屏蔽的: -![23_facade](..\pictures\23_facade.png) +
+ + 安全检查系统: @@ -1484,7 +1543,9 @@ XXX手机已经发货,请注意查收... 这里以创建 PPT 模板为例,相同类型的 PPT 模板不再重复创建: -![23_flyweight](..\pictures\23_flyweight.png) +
+ + PPT 抽象类: @@ -1617,7 +1678,9 @@ public class ZTest { 假设多个用户都关注某一个商家,当商家发出降价等通知时,所有用户都应该收到: -![23_observer](../pictures/23_observer.png) +
+ + 被观察者接口及商家实现类: @@ -1718,7 +1781,9 @@ business.notifyObservers("商品促销通知"); 假设一个正常的流程,根据请假天数的不同,需要不同的领导共同审批: -![23_chain_of_responsibility](..\pictures\23_chain_of_responsibility.png) +
+ + 申请单: @@ -1831,7 +1896,9 @@ groupLeader.approval(new Application("婚假单", 10)); 手机一般都有电池,摄像头等模块,但不是所有手机都有 NFC 模块,如果采用模板模式构建,则相关代码如下: -![23_chain_of_responsibility](..\pictures\23_template.png) +
+ + 抽象的父类: @@ -1932,7 +1999,9 @@ smartPhone.assembling(); 假设公司需要根据营业额的不同来选择不同的员工激励策略: -![23_strategy](..\pictures\23_strategy.png) +
+ + 策略接口及其实现类: @@ -2016,7 +2085,9 @@ public static void main(String[] args) { 假设我们正在开发一个播放器,它有如下图所示四种基本的状态:播放状态,关闭状态,暂停状态,加速播放状态。这四种状态间可以相互转换,但存在一定的限制,比如在关闭或者暂停状态下,都不能加速视频,采用状态模式来实现该播放器的相关代码如下: -![23_state](..\pictures\23_state.png) +
+ + 定义状态抽象类: @@ -2380,7 +2451,9 @@ while (iterator.hasNext()) { 通常不同级别的员工对于公司档案的访问权限是不同的,为方便理解,如下图所示假设只有公开和加密两种类型的档案,并且只有总经理和部门经理才能进入档案室: -![23_visitor](..\pictures\23_visitor.png) +
+ + 定义档案类及其实现类: