SF
对设计模式的理解
对设计模式的理解
注册登录
关注博客
注册登录
主页
关于
RSS
访问者模式(Visitor)
JadeQYuan
2018-06-12
阅读 2 分钟
3.7k
访问者模式 一. 访问者模式 1.1 定义 表示一个作用于某对象结构中的各元素操作.它使你可以在不改变各元素类的前提下,定义作用于这些元素的新操作. 1.2 角色 抽象访问者对象(Visit). 具体访问者对象(ConcreteVisit). 抽象元素对象(Element). 具体元素对象(ConcreteElement). 结构对象(ObjectStructure). 二. ...
模板方法模式(Template)
JadeQYuan
2018-06-11
阅读 2 分钟
1.7k
模板方法模式 一. 模板方法模式 1.1 定义 定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤. 1.2 角色 抽象类:实现了模板方法. 具体类:实现抽象类中的抽象方法. 1.3 抽象类中的方法 抽象方法:父类只声明,不实现. 模板方法:父类声明并实现. 钩子...
状态模式(State)
JadeQYuan
2018-06-10
阅读 2 分钟
3.8k
状态模式 一. 状态模式 1.1 定义 允许一个对象在其内部状态改变时改变它的行为.这个对象看起来像是改变了其类. 二. 具体实现 2.1 创建抽象状态接口 {代码...} 2.2 创建容器 {代码...} 2.3 创建具体状态类 {代码...} 2.5 调用 {代码...} 2.6 输出 {代码...} 三. 优缺点 3.1 优点 封装了转换规则. 扩展性强,易于添加新的...
观察者模式(Observer)
JadeQYuan
2018-06-06
阅读 2 分钟
4.7k
观察者模式 一. 观察者模式 1.1 定义 定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于他的对象都会得到通知,并自动更新. 1.2 角色 抽象观察者角色(IObserver). 抽象被观察者角色(ISubject). 具体观察者角色(Observer). 具体被观察者角色(Subject). 1.3 模式 拉模式:只通知是否变化而...
备忘录模式(Memento)
JadeQYuan
2018-06-05
阅读 2 分钟
3.6k
备忘录模式 一. 备忘录模式 1.1 定义 在不破坏封闭性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态. 1.2 角色 备忘录(Memento):用于存储发起者对象的内部状态. 发起者(Orginator):创建备忘录,记录或恢复自身状态. 管理者(CareTaker):负责管理备忘录....
中介者模式(Mediator)
JadeQYuan
2018-06-04
阅读 2 分钟
5.5k
中介者模式 一. 中介者模式 1.1 定义 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示的相互作用,从而使耦合松散,而且可以独立的改变他们之间的交互. 1.2 角色 抽象中介者类(AbstractMediator). 具体中介者实现类(Mediator). 同事类(Colleague). 二. 具体实现 2.1 创建抽象中介者对象 {代码......
迭代器模式(Iterator)
JadeQYuan
2018-06-03
阅读 2 分钟
4k
迭代器模式 一. 迭代器模式 1.1 定义 提供一种方法顺序访问一个集合对象中的各种元素,而又不暴露该对象的内部表示. 1.2 角色 抽象迭代器接口(Iterator). 具体迭代器(ConcreteIterator). 抽象聚合接口(Aggregate). 具体聚合(ConcreteAggregate). 二. 具体实现 1.1 创建抽象迭代器接口 {代码...} 1.2 创建抽象聚...
解释器模式(Interpreter)
JadeQYuan
2018-06-02
阅读 2 分钟
4.2k
解释器模式 一. 解释器模式 1.1 定义 给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 1.2 角色 抽象表达式接口(IExpression). 终结符表达式(TerminalExpression). 非终结符表达式(NonterminalExpression). 上下文环境(Context). 二. 具体实现 1.1 创建抽象...
命令模式(Command)
JadeQYuan
2018-05-31
阅读 2 分钟
7k
命令模式 一. 命令模式 1.1 定义 对于“行为请求者”和“行为实现者”,将一组行为抽象为对象,实现二者的松耦合. 1.2 角色 Command:抽象命令接口. ConcreteCommand:具体命令. Receiver:最终执行命令的对象. Invoker:命令对象的入口. 二. 具体实现 1.1 创建Command接口 {代码...} 1.2 创建命令执行对象 {代码...} 1.3 创建具...
责任链模式(Chain Of Responsibility)
JadeQYuan
2018-05-30
阅读 2 分钟
3.7k
责任链模式 一. 责任链模式 1.1 定义 在责任链模式中,许多对象由每个对象及其对下家的引用而连接起来形成一条链.请求在这个链上传递,知道其中的某一个对象决定处理此请求. 1.2 角色 抽象处理者角色(Handler). 具体处理者角色(ConcertHandler). 1.3 纯与不纯 纯的责任链模式:要么处理,要么让下家处理,而不能处理...
代理模式(Proxy)
JadeQYuan
2018-05-26
阅读 1 分钟
3.1k
代理模式 一. 代理模式 1.1 定义 为其他对象提供一种代理以控制对这种对象的访问. 二. 具体实现 2.1 创建公共接口 {代码...} 2.2 创建被代理类 {代码...} 2.3 创建代理类 {代码...} 2.4 调用 {代码...} 2.5 输出 {代码...} 三. 优缺点 3.1 优点 职责清晰. 高扩展性. 3.2 缺点 对对象的请求速度变慢. 四. 源码 {代码...} END
享元模式(Flyweight)
JadeQYuan
2018-05-25
阅读 2 分钟
3.4k
享元模式 一. 享元模式 1.1 定义 运用共享技术有效的支持大量细粒度的对象. 二. 具体实现 2.1 创建对象接口 {代码...} 2.2 创建具体对象 {代码...} 2.3 创建工厂 {代码...} 2.4 调用 {代码...} 2.5 输出 {代码...} 三. 优缺点 3.1 优点 减少对象的创建,节省内存. 3.2 缺点 提升了系统的复杂性. 四. 源码 {代码...} END
外观模式(Facade)
JadeQYuan
2018-05-24
阅读 1 分钟
2.4k
外观模式 一.外观(门面)模式 1.1 定义 二.具体实现 2.1 创建模块接口 {代码...} 2.2 创建具体模块 {代码...} 2.3 创建门面对象 {代码...} 2.4 调用 {代码...} 2.5 输出 {代码...} 三.优缺点 3.1 优点 减少系统间相互依赖. 提高安全性. 3.2 缺点 不符合开闭原则,修改代码复杂. 四.源码 {代码...} END
装饰器模式(Decorator)
JadeQYuan
2018-05-23
阅读 2 分钟
5.4k
装饰器模式 一.装饰器模式 1.1 定义 在不改变原类文件和使用继承的情况下,动态的扩展一个对象的功能. 通过创建一个包装对象(装饰),来包裹真实的对象. 二.具体实现 1.1 创建被装饰对象接口 {代码...} 1.2 创建被装饰对象 {代码...} 1.3 创建装饰器抽象类 {代码...} 1.4 创建具体装饰器 {代码...} 1.5 调用 {代码...} ...
组合模式(Composite)
JadeQYuan
2018-05-21
阅读 2 分钟
3.1k
组合模式 一.组合模式 1.1 定义 将对象组合成树形结构以表示“部分-整体”的层次结构. 组合模式使得用户对单个对象和组合对象的使用具有一致性. 二.实现 2.1 创建节点类 {代码...} 2.2 调用 {代码...} 2.3 输出 {代码...} 三.优缺点 3.1 优点 调用简单. 节点自由增加. 3.2 缺点 类间组合,违反依赖倒置原则. 四.源码 {代码...
桥接模式(Bridge)
JadeQYuan
2018-05-19
阅读 2 分钟
3.1k
桥接模式 一.桥接模式 1.1 定义 把抽象化和实现化解耦,使得二者可以独立变化. 1.2 角色 业务抽象角色(Implementor). 业务实现角色(Abstraction). 二. 具体实现 2.1 创建业务实现的接口 {代码...} 2.2 创建业务实现的具体实现类 {代码...} 2.3 创建业务抽象的抽象类 {代码...} 2.4 创建业务抽象的实现类 {代码...} 2.5 ...
适配器模式(Adapter)
JadeQYuan
2018-05-18
阅读 2 分钟
4.7k
适配器模式 一.适配器模式 1.1 定义 将一个接口转换成客户希望的另一个接口. 1.2 角色 目标接口对象(Target):客户希望的另一个接口或具体类. 需要适配的类(Adaptee):现有的,不符合客户需求的接口或具体类. 适配器对象(Adapter):包装适配的对象,转换接口. 1.3 实现方式 类适配器(继承). 对象适配器(聚合)....
原型模式(Prototype)
JadeQYuan
2018-05-17
阅读 2 分钟
2.7k
原型模式 一.一般实现 1.1 创建对象 {代码...} 1.2 调用 {代码...} 1.3 输出 {代码...} 1.4 缺点 如需大量创建某对象,对象创建效率,性能低. 创建对象收访问权限的限制. 二.原型模式 2.1 定义 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 2.2 条件 实现Cloneable接口. 重写Object的clone方法. 2.3 ...
建造者模式(Builder)
JadeQYuan
2018-05-16
阅读 3 分钟
3.9k
建造者模式(Builder) 一.一般实现 1.1 创建简单对象 {代码...} 1.2 创建复杂对象 {代码...} 1.3 调用 {代码...} 1.4 输出 {代码...} 1.5 缺点 对象耦合度过高,简单对象,复杂对象都与调用程序耦合. 当简单对象组合的方式发生变化时,由其组合创建的复杂对象也跟着发生变化. 二.建造者模式 2.1 定义 将一个复杂的对象...
设计模式
JadeQYuan
2018-05-06
阅读 1 分钟
4.8k
在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书,该书首次提到了软件开发中设计模式的概念。四位作者合称 GOF(四人帮,全拼 Gang of Fo...
抽象工厂模式(Abstract Factory)
JadeQYuan
2018-05-06
阅读 2 分钟
2.1k
抽象工厂模式 概念 抽象工厂模式是工厂模式的升级,用来创建一组相关或相互依赖的对象。 角色 1.抽象工厂角色 2.具体工厂角色 3.产品接口或抽象产品角色 4.具体产品角色 角色对应关系 1.多个具体工厂继承自抽象工厂; 2.多个具体产品继承自抽象产品或实现产品接口; 3.每个具体工厂可产生多个具体产品。 实现过程 {代码....
设计模式原则
JadeQYuan
2018-05-06
阅读 2 分钟
1.6k
单一职责原则(Single Responsibility Principle) {代码...} 里氏替换原则(Liskov Substitution Principle) {代码...} 依赖倒转原则(Dependence Inversion Principle) {代码...} 接口隔离原则(Interface Segregation Principle) {代码...} 迪米特法则(Low Of Demeter) {代码...} 合成复用原则(Composite Reuse...
工厂模式(FactoryMethod)
JadeQYuan
2018-05-02
阅读 3 分钟
1.8k
一般实现 创建实体类 {代码...} 调用方法 {代码...} 输出 {代码...} 问题 new操作符是创建对象最常用的方法,但是在一些情况下,new方法会产生一些问题,或者并不能满足需求,也就是说,对象的创建是一个过程,而不是一个操作。 简单/静态工厂方法 创建接口或抽象类 {代码...} 具体实现类 {代码...} 创建工厂 {代码...} ...
单例模式(Singleton)
JadeQYuan
2018-04-28
阅读 3 分钟
2.3k
一般实现 创建执行方法 {代码...} 测试类 {代码...} 输出 {代码...} 问题 每次生成的类的实例对象都是不同的,但是在一些特定的场合,需要每次返回的实例对象都是同一个,如:sping中创建bean。 懒汉式单例模式 单例类 {代码...} {代码...} {代码...} {代码...} {代码...} 实现方式构造方法私有化。 存在问题线程不安全...
策略模式(Strategy)
JadeQYuan
2018-04-27
阅读 2 分钟
2k
一般实现 创建执行方法 {代码...} 测试类 {代码...} 问题 在执行方法中添加或修改方法时,需要修改执行类的源代码,及客户端调用的方法。 策略模式 需要创建 一个容器类(Context),一个策略接口(IStrategy),多个策略类(Strategy implement IStrategy)及一个测试类。 代码实现容器类:通过构造方法注入IStrategy接...