语言小结
  • program-language-note
  • contact
  • common
    • 代码风格
    • 概念语法
      • 类型
      • 注释
      • 字符
      • 语句
      • 操作符
      • 函数
        • 递归
    • 格式化参数
    • 源码结构
    • 数据结构
    • 名词
  • 电路
    • 内存地址
    • Untitled
    • Code
  • C
    • note
    • overview
      • helloworld.c
      • c标准
      • 关键字
      • tips
      • util.c
    • 语法
      • 函数
        • main
      • const
      • static
      • 作用域
    • 编译和运行
      • c代码内存模型
      • 预处理
        • include
        • define
    • 头文件
    • 基本数据类型
      • 整型
      • 枚举
      • 浮点型
      • 指针
      • 数组
      • 结构和联合
    • 指针&数组、指针&函数
    • API
    • 存储结构
    • 操作符
      • sizeof
    • typedef
    • 输入输出
    • 格式化参数
    • 左値右値
    • 性能思考
    • volatile
    • 字符串
      • find_char.c
    • 动态分配
      • alloc.h
      • alloc.c
      • alloc_usage.c
    • note
  • cpp
    • 资源
    • note
    • 数据结构
    • 智能指针
    • 编译过程
  • shell
    • usage
    • Untitled
  • Rust
    • overview
  • Lisp
    • Untitled
  • web
    • overview
      • index
      • 软件工具
      • ARIA规范
      • SEO
    • style
    • html
      • 标签、元素
        • 标签快记
        • 联系信息
        • 引用
        • 列表
        • 语言设置
        • meta
      • 页面结构
        • 图片
        • 视频
        • 引用css、js文件
      • 等价字符
      • 链接
        • 邮件
      • 表单
        • note
      • 表格
    • css
      • 字体
      • 布局
        • position
        • float
        • display
        • flexbox
    • js
    • note
  • java
    • note
    • java语言程序设计
    • 设计模式
      • 大话设计模式-吴强-2010
      • 大话设计模式-程杰
      • 设计模式-gof
      • 设计模式解析
      • 原则
      • 单例
    • java程序设计第10版-基础
    • java程序设计第10版-进阶
    • java核心技术第9版-I
    • jar包
    • 安全
    • 反射
  • python
    • note
    • index
    • 个人记忆点
    • 疑惑
    • simple
    • 精通Python爬虫框架scrapy
    • 语法
    • scrapy
      • notice
      • index
  • 汇编
    • Untitled
  • kotlin
    • index
    • note
    • by android
      • note
      • index
  • groovy
    • gradle
Powered by GitBook
On this page
  • 分类
  • 简单工厂模式
  • 策略模式
  • 装饰模式
  • 代理模式
  • 工厂方法模式
  • 原型模式
  • 模板模式
  • 外观模式
  • 建造者模式
  • 观察者模式
  • 抽象工厂模式
  • 状态模式
  • 适配器模式
  • 备忘录模式
  • 组合模式
  • 迭代器模式
  • 单例模式
  • 桥接模式
  • 命令模式
  • 职责链模式
  • 中介者模式
  • 享元模式
  • 解释器模式
  • 访问者模式

Was this helpful?

  1. java
  2. 设计模式

大话设计模式-程杰

源码地址:http://www.cnblogs.com/Files/cj723/BigTalkDesignPattenSourceCode.rar

书的前面介绍了很多著作: 《设计模式:可复用面向对象软件的基础》(GOF的ERICH Gamm,Richard Helm, Ralph Johnson, John Vlissides) 《设计模式解析》(Alan Shalloway, James R. Trott) 《敏捷软件开发:原则、模式与实践》(Robert C.Martin) 《重构--改善既有代码的设计》(Martin Fowler) 《重构与模式》(Joshua Kerievsky) 《Java与模式》(阎宏) 《Head first design patterns》(eric freeman)

语言是c#

前面讲的还好,后面的有点扯的

分类

创建型

抽象工厂,建造者,工厂方法,原型模式,单例模式

结构型

适配器,桥接,组合,装饰,外观,享元,代理

行为型

观察者,模板方法,命令,状态,职责链, 解释器,中介者,访问者,策略,备忘录,迭代器

简单工厂模式

就是使用判断语句 来根据输入信息,得到对应的输出信息。 然后封装到单一的方法内部,不需要让调用者知道具体细节。

这样调用者还是需要知道工厂方法和输出信息。如:

int a = 1;
int b = 2;
String operate = "/";

OperatorFactory.getOperator(operate).process(a, b);

策略模式

int a = 1;
int b = 2;
String operate = "/";
//不一定要工厂嘛
Strategy strategy = StrategyFactory.getStrategy(operate);

new OperatorStrategy().setStrategy(strategy).do(a, b);
//当然可以在构造中直接进行
new OperatorStrategy(strategy).do(a, b);

不过可以把工厂方法放在策略类内部,而不单独建立工厂类 同时输出信息就是策略类本身 这样调用方就只需要知道一个输出信息。

new OperatorStrategy().setStrategyByOperate(operate).do(a, b);

装饰模式

//被装饰者
ConcreteComponent cc = new ConcreteComponent();
//装饰1
DecoratorComponent.ComponentA ca = new DecoratorComponent.ComponentA();
//装饰2
DecoratorComponent.ComponentB cb = new DecoratorComponent.ComponentB();
//装饰1持有被装饰者,并和被装饰者的行为统一
ca.setComponent(cc);
//装饰者2持有被装饰者1,行为统一
cb.setComponent(ca);
//最后一个装饰者调用统一的行为
cb.decoratorOperate();

DecoratorComponent通过setComponent 持有被装饰者,然后可以进行修饰行为 当然在构造函数中直接设置可以让调用看起来更加爽快

cb(ca(cc)).decoratorOperate();

代理模式

//不管是什么形式,proxyPursuit.doPursuit() 都将pursuit和target关联起来
//事件流
Target target = new Target();
ProxyPursuit proxyPursuit = new ProxyPursuit();
proxyPursuit.knowTarget(target);

Pursuitor pursuitor = new Pursuitor();
pursuitor.setProxy(proxyPursuit);

pursuitor.doPursuit();

//代码流
Target target = new Target();
Pursuitor pursuitor = new Pursuitor();
ProxyPursuit proxyPursuit = new ProxyPursuit();
proxyPursuit.knowTarget(target);
proxyPursuit.setFrom(pursuitor);

proxyPursuit.doPursuit();

工厂方法模式

让子类决定实例化哪一种示例,用接口统一化实现

相对于简单工厂而言,不违背OCP。

原型模式

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 java里就是clone

模板模式

利用java的多态,抽象类设计抽象方法即可。。。

外观模式

定义一个高层接口,屏蔽了对一系列低层接口的细节操作 (就是统一操作?)

建造者模式

需要构建顺序稳定的情况。 先创建一个抽象类,然后用一个辅助类持有引用,并在创建方法中设定创建过程。

Director director = new Director();
Builder b1 = new Builder1();//需要构建的部分
director.build(b1);//控制Builder接口的调用顺序
b1.getResult().display();

这种形式感觉没有Android Dialog.Builder的顺畅

观察者模式

常规观察者模式比较简单,一方持有观察者的列表,通知时遍历即可。最多抽取一下接口 但是对于现有的代码结构,可能不能都继承这样的接口,即行为不统一。 此时需要使用方法委托,而java的方法委托实际上是用反射实现的,参看EventHandler

抽象工厂模式

在需要配置 多个总组件,而每个组件下面又有基本一样的组件结构的时候。 可以考虑这种模式,甚至加上反射来简化。 (其实感觉平时写的时候,只要追求抽象,在业务逻辑有这种需要时,总能写出来这样的代码。)

状态模式

状态有序化

适配器模式

持有转化

备忘录模式

虽然clone有类似的效果,但是定制性不高。建议自己写一个需要的状态存储类 提了下命令模式。。又讲到下面去了。。

组合模式

树状依赖 透明方式:把非共有的方法也定义在抽象接口,在实现时如不需要则不进行操作 安全方式:把共有的方法抽象,而非共有的方法在需要的地方添加。

迭代器模式

foreach 咯

单例模式

桥接模式

有点莫名其妙的。。。把一个东西的多个维度,如有需要,抽取维度为独立的部分,被总体持有。

命令模式

感觉就是把一些被调用方的判断抽取成对应的类,和工厂方法模式有的一拼? 然后加个中间类进行控制,让被调用方对于调用方而言,更加直白。

职责链模式

链式请求,队列。。。

中介者模式

就是增加了中间类,持有所有需要交互的平级类。平级类又持有中间类,进行交互。 感觉加一些东西就是命令模式了。。。

享元模式

还是通过第三者存储,然后处理统一接口 主要目的是为了共享对象,当然也可以不共享(个人觉得这是基本操作吧?谈不上模式?) 如果有不能共享的数据,考虑从外部传入。。

解释器模式

接口设置不同的解释器,然后通过接口方法统一执行。层层过滤。。没了。。。 真的感觉后面的这些模式没啥差别啊。。。

访问者模式

很多时候,主体有确定数量的类别,但有很多属性。如果正常的设计,需要实例化不同类别的主体,再增加对应的属性。 而修改的可能性很高,且涉及到主体的多次修改。。。。 这个时候可以反其道而行,按属性抽象;同时将属性赋值给主体的同时,调用主体的对应方法,可以把属性的行为封装起来。 这样修改的时候,只需要添加属性具体类,并放入较少的主体信息即可。

Previous大话设计模式-吴强-2010Next设计模式-gof

Last updated 5 years ago

Was this helpful?