{"componentChunkName":"component---src-templates-blog-post-js","path":"/blog/2020-06-18-OOD/","result":{"data":{"markdownRemark":{"id":"3ad3229e-fb47-593c-a77f-e84bce9efcd3","html":"<p><img src=\"/img/flavor_wheel.jpg\" alt=\"flavor wheel\"></p>\n<h1>面向对象设计模式</h1>\n<h2>设计模式的定义</h2>\n<p>面向对象的遵循设计原则的能够抽象出来的都是设计模式。</p>\n<p>设计模式用来降低问题的复杂度，不能用来解决技术难点。</p>\n<h3>什么是设计模式?</h3>\n<ul>\n<li>每一种模式都描述了一种问题的通用解决方案。这种问题在我们的环境中,不停地出现。</li>\n<li>设计模式是一种<code>可重复使用</code>的解決方案。</li>\n</ul>\n<h3>设计模式的四个部分</h3>\n<ul>\n<li>模式的名称 - 由少量的字组成的名称、有助于我们表达我们的设计。</li>\n<li>待解问题 - 描述了何时需要运用这种模式,以及运用模式的环境(上下文)。</li>\n<li>解决方案 - 描述了<code>组成设计的元素</code>(类和对象)、它们的关系、职责以及合作。但这种解决方案是抽象的,它不代表具体的实现。</li>\n<li>结论 - 运用这种方案所带来的利和弊。主要是指它对系统的弹性、扩展性、和可移植性的。最终目的是高内聚、低耦合。</li>\n</ul>\n<h2>常见设计模式</h2>\n<table>\n<thead>\n<tr>\n<th>模式</th>\n<th>待解问题</th>\n<th>元素</th>\n<th></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>策略</td>\n<td>---</td>\n<td>1 客户程序 2 策略（接口） 3 策略实现</td>\n<td>---</td>\n</tr>\n<tr>\n<td>观察者</td>\n<td>通知观察者</td>\n<td>1 观察者 1.1 观察者接口 2 被观察者 2.1 集合成员（哪些观察者在观察）</td>\n<td>---</td>\n</tr>\n<tr>\n<td>适配器</td>\n<td>依赖倒置，根据高层定义接口适配不便实现的接口，重新定义函数同时复用已有函数。实现改变，接口不变。</td>\n<td>---</td>\n<td>类适配、对象适配</td>\n</tr>\n<tr>\n<td>简单工厂</td>\n<td>隐藏 bean 创建细节</td>\n<td>1 客户程序 2 策略接口 3 策略实现 4 Bean 工厂</td>\n<td>是许多其他模式的基础，读取配置来创建 bean 解决了工厂模式的开闭原则问题</td>\n</tr>\n<tr>\n<td>单例</td>\n<td>在指定作用域内只实例化一个实例</td>\n<td>---</td>\n<td>---</td>\n</tr>\n<tr>\n<td>组合</td>\n<td>树 - 文件系统、菜单</td>\n<td>1 策略 2 子组件 3 遍历自身</td>\n<td>---</td>\n</tr>\n<tr>\n<td>模板</td>\n<td>---</td>\n<td>1 模板方法 2 定义模板方法执行顺序 3 客户程序 实现修改具体的逻辑</td>\n<td>---</td>\n</tr>\n<tr>\n<td>装饰器</td>\n<td>对现有\b函数追加功能（编译期）</td>\n<td>1 统一接口 2 装饰者 3 被装饰者</td>\n<td>装饰者和被装饰者通过构造函数传递，可以互相装饰</td>\n</tr>\n<tr>\n<td>MVC</td>\n<td>---</td>\n<td>---</td>\n<td>---</td>\n</tr>\n<tr>\n<td>代理</td>\n<td>运行期动态赋能。</td>\n<td>---</td>\n<td>---</td>\n</tr>\n<tr>\n<td>---</td>\n<td>---</td>\n<td>---</td>\n<td>---</td>\n</tr>\n</tbody>\n</table>\n<h3>策略模式</h3>\n<h3>适配器模式</h3>\n<h3>工厂模式</h3>\n<h3>单例模式</h3>\n<h3>观察者模式</h3>\n<h3>组合模式</h3>\n<h3>装饰器模式</h3>\n<h3>责任链模式</h3>\n<h3>模板方法模式</h3>\n<h3>代理模式</h3>\n<h3>建造者模式</h3>\n<h3>状态模式</h3>\n<h3>MVC 模式</h3>","frontmatter":{"date":"June 18, 2020","title":"面向对象设计模式","description":"面向对象设计模式","tags":null}}},"pageContext":{"id":"3ad3229e-fb47-593c-a77f-e84bce9efcd3"}}}