Loading

随笔分类 -  设计模式

摘要:防御式编程 防御式编程 为什么要防御式编程 编写大多数情况下都能用(可用)的代码很容易。但是提供意外输入会崩溃 正确的代码绝不会崩溃。但所有可能输入集合很大,难以测试;并非所有正确的代码都是优秀的代码,可能逻辑难以理解,并几乎无法维护 优秀的代码是健壮的、高效的、当然也是正确的。即便面对不常见输入, 阅读全文
posted @ 2021-06-29 16:57 cpaulyz 阅读(351) 评论(0) 推荐(0)
摘要:面向对象设计原则 目标:开闭原则 指导:最小知识原则 基础:单一职责原则、可变性封装原则 实现:依赖倒转原则、合成复用原则、里氏代换原则、接口隔离原则 单一职责原则SRP Single Responsibility Principle 定义:一个对象应该只包含一个单一的职责,并且该职责被完整地封装在 阅读全文
posted @ 2021-06-29 16:56 cpaulyz 阅读(141) 评论(0) 推荐(0)
摘要:设计模式概述 索引 我的一些笔记 面向对象设计原则 设计模式总结:创建型模式 设计模式总结:行为型模式 设计模式总结:结构型模式 值得参考的网站 http://c.biancheng.net/design_pattern/ https://design-patterns.readthedocs.io 阅读全文
posted @ 2021-06-29 16:54 cpaulyz 阅读(200) 评论(0) 推荐(0)
摘要:表驱动(直接访问、索引访问、阶梯访问) 表驱动是一种编程模式(scheme),将复杂的逻辑从代码中独立出来,便于单独维护 直接访问表 Direct Access 通过索引值(下标)直接从表中找到对应的条目 案例 案例1:(一维查找:即可以代替一层的if结构或者switch结构): 比如你要查找1-- 阅读全文
posted @ 2021-06-27 12:30 cpaulyz 阅读(968) 评论(0) 推荐(0)
摘要:行为型模式 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承 阅读全文
posted @ 2021-06-24 21:16 cpaulyz 阅读(466) 评论(0) 推荐(1)
摘要:结构型模式 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。 类模式 (类)适配器模式 对象模式 (对象)适配器模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 代理(Proxy) 阅读全文
posted @ 2021-06-24 21:15 cpaulyz 阅读(256) 评论(0) 推荐(0)
摘要:创建型模式 类模式 工厂方法模式 对象模式 抽象工厂模式 建造者模式 原型模式 单例模式 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类 阅读全文
posted @ 2021-06-23 17:24 cpaulyz 阅读(293) 评论(0) 推荐(0)
摘要:状态模式 通过改变对象内部的状态来帮助对象控制自己的行为 状态机 状态图 实现1.0 状态 final static int SOLD_OUT = 0; final static int NO_QUARTER = 1; final static int HAS_QUARTER = 2; final 阅读全文
posted @ 2020-06-21 17:51 cpaulyz 阅读(137) 评论(0) 推荐(0)
摘要:装饰者模式 动态地将责任附加到对象上,若要有扩展功能,装饰者提供了比继承有弹性的替代方案。 类图 应用 例子 咖啡类,可以加调料,计算价格 想法 设计 代码示例 public class Mocha extends CondimentDecorator{ Beverage beverage; pub 阅读全文
posted @ 2020-06-21 17:50 cpaulyz 阅读(129) 评论(0) 推荐(0)
摘要:外观模式 为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 最少知识原则 只和密友交谈 例子 public class ShapeMaker { private Shape circle; private Shape rectangle; pr 阅读全文
posted @ 2020-06-21 17:48 cpaulyz 阅读(114) 评论(0) 推荐(0)
摘要:适配器模式 将一个类的接口,转换成客户期待的另一个接口 可以有双向适配器,只要实现了两个接口 类适配器 采用继承的方法 // 已存在的、具有特殊功能、但不符合我们既有的标准接口的类 class Adaptee { public void specificRequest() { System.out. 阅读全文
posted @ 2020-06-21 17:47 cpaulyz 阅读(109) 评论(0) 推荐(0)
摘要:模板方法模式 在一个方法在定义了一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 抽象类专注算法本身,子类提供完整实现 代码复用最大化 例子 abstract class AbstractClass{ final void templ 阅读全文
posted @ 2020-06-21 17:46 cpaulyz 阅读(127) 评论(0) 推荐(0)
摘要:命令模式 将“动作的请求者”从“动作的执行者“对象中解耦 将”请求“封装成对象,可以支持撤销等操作 优点: 1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。 **缺点:**使用命令模式可能会导致某些系统有过多的具体命令类。 需要对行为进行记录、撤销或重做、事务等处理时考虑用命令模式 应 阅读全文
posted @ 2020-06-21 17:45 cpaulyz 阅读(114) 评论(0) 推荐(0)
摘要:观察者模式 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 Java内置的观察者模式 两种送出通知的方式 notifyObservers() notifyObservers(Object arg) 接收通知的方式 update(Observa 阅读全文
posted @ 2020-06-21 17:43 cpaulyz 阅读(108) 评论(0) 推荐(0)
摘要:复合模式 一种由模式所构成的模式 在设计中携手合作解决许多问题的模式 模式通常被一起使用,并被组合在同一个设计解决方案中 复合模式在一个解决方案中结合两个或多个模式,以解决一般或重复发生的问题 MVC MVC是由数个设计模式结合起来的模式 观察者模式 策略模式 组合模式 阅读全文
posted @ 2020-06-21 17:42 cpaulyz 阅读(167) 评论(0) 推荐(0)
摘要:迭代器模式 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。 可以用同一种方法来遍历 例子 // 如果是arraylist之类的,内置的就有了 public class PancakeHouseMenu implements Menu{ Arraylist<MenuIte 阅读全文
posted @ 2020-06-21 17:41 cpaulyz 阅读(121) 评论(0) 推荐(0)
摘要:代理模式 远程代理 远程代理好比“远程对象的本地代表” Java RMI 客户调用客户辅助对象上的方法 客户辅助对象打包调用信息,通过网络传给服务辅助对象 服务辅助对象调用服务对象,将结果打包返回给客户辅助对象 客户辅助对象把结果返回给客户对象 以上过程对客户是透明的 RMI把客户辅助对象称为stu 阅读全文
posted @ 2020-06-21 17:40 cpaulyz 阅读(139) 评论(0) 推荐(0)
摘要:策略模式 定义算法组,分别封装起来,让它们之间可以相互替换。让算法的变化独立于使用算法的客户 优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。 缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。 例子 需求 实现一群鸭子类,有不同的飞行行为、外观、叫声。。。 不使 阅读全文
posted @ 2020-06-21 17:39 cpaulyz 阅读(122) 评论(0) 推荐(0)
摘要:组合模式 面对这样一种问题,可能List里面套List,是一种如下的树形数据结构 简单来说,叶子节点才是实际对象,其他都是一个集合 这时候就需要组合模式 组合模式将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 想表示对象的部分-整体层次结构 阅读全文
posted @ 2020-06-21 00:55 cpaulyz 阅读(181) 评论(0) 推荐(0)