设计模式与实时示例

thi*_*hil 3 design-patterns

我想通过实时示例学习设计模式.所以任何人都可以建议我可以从哪里开始.

Pre*_*raj 23

注意:使用现实生活和Java API示例添加简要定义.

创力

你想如何创建对象?

原型:要复制或克隆的完全初始化的实例
示例:国际象棋游戏的初始状态

  • java.lang.Object#clone()

构建器 - 将复杂对象的构造与其表示分开,以便相同的构造过程可以创建不同的表示
示例:厨房是工厂,厨师是建筑师,服务员告诉厨师"披萨配奶酪,洋葱".这里厨师暴露属性但隐藏实现.

  • java.lang.StringBuilder中

单例 - 一类只能存在一个实例的
例子:一个国家的总统

  • java.lang.Runtime中#getRuntime()

Factory方法 - 创建多个派生类的实例.
示例:在组织中,HR用作工厂方法.这里开发团队要求HR需要资源类型.根据请求类型,HR为开发团队提供资源.

  • 的java.util.Calendar#的getInstance()

Abstract Factory - 创建几个类族的
实例示例:HP,Samsung和Dell笔记本电脑都使用Intel和AMD处理器.

  • javax.xml.parsers.DocumentBuilderFactory中的newInstance#()

工厂方法与抽象工厂

结构

这种设计模式都是关于类和对象的组合,即如何构建软件组件.

代理 - 表示另一个对象的对象
示例:支票簿,信用卡,借记卡是Money的代理,客户代表可以订购产品.

  • java.rmi.*,实际上是整个API.

Composite - 为叶子和复合提供统一的接口.
示例:操作系统中的文件系统,目录是复合的,文件是离开的.系统调用Open是复合和叶子的单一接口.

装饰器 - 为叶子提供附加功能,同时提供统一的界面.
示例:1)在订单上添加折扣2)枪本身就是一种致​​命的武器.但是你可以应用某些"装饰"来使它更准确,更安静和更具破坏性.

  • java.io.InputStream,OutputStream,Reader和Writer的所有子类都有一个构造函数,它接受相同类型的实例.

Facade - 使用单一界面简化多个复杂组件
示例:控制面板

  • javax.faces.context.ExternalContext,内部使用ServletContext,HttpSession,HttpServletRequest,HttpServletResponse等

适配器 - 为接口提供不同的接口.
示例:电源适配器

  • java.util.Arrays中#asList()

Flyweight - 用于高效共享的细粒度实例
示例:拨号音

  • java.lang.Integer #valueOf(int)(也用于布尔,字节,字符,短和长)

行为的

这种设计模式都是关于类的对象通信,即你想如何在软件中进行行为?

责任链 - 在一系列对象之间传递请求的方法
示例:贷款或离开审批流程

  • javax.servlet.Filter的#的doFilter()

迭代器 - 按顺序访问集合的元素
示例:电视上的下一个/上一个按钮

  • java.util.Iterator和java.util.Enumeration的所有实现

状态 - 在状态更改时更改对象的行为
示例:扇形墙控件

观察者 - 通知更改多个类的方法
示例:出价或拍卖

  • 发布/订阅JMS API

访问者 - 无需更改即可为类定义新操作
示例:Taxi

模板 - 将算法的确切步骤推迟到子类
示例:蓝色打印

  • java.io.InputStream,java.io.OutputStream,java.io.Reader和java.io.Writer的所有非抽象方法.
  • java.util.AbstractList,java.util.AbstractSet和java.util.AbstractMap的所有非抽象方法.
  • javax.servlet.http.HttpServlet,默认情况下,所有doXXX()方法都会向响应发送HTTP 405"Method Not Allowed"错误.您可以自由地实施任何一个或任何一个.
    • 在Spring中JMSTemplate HibernateTemplate和JdbcTemplate

命令 - 将命令请求封装为对象
示例:用餐者的"访客检查"是命令模式的示例.服务员或女服务员接受客户的订单或命令,并通过将其写入支票来封装该订单.然后该订单排队等待短期烹饪.请注意,每个服务员使用的"支票"垫不依赖于菜单,因此它们可以支持烹饪许多不同项目的命令.

  • java.lang.Runnable的所有实现

Memento - 捕获并恢复对象的内部状态
示例:在Windows中保存状态并在Windows中保存/撤消/重做操作

  • java.io.Serializable的所有实现

中介 - 定义类之间的简化通信
示例:空中交通管制员(ATC)

策略 - 策略定义了一组可互换使用的算法.
示例:运输方式

  • java.util.Comparator#compare(),由其他集合执行#sort().
  • javax.servlet.http.HttpServlet,service()和所有doXXX()方法都使用HttpServletRequest和HttpServletResponse,实现者必须处理它们(而不是将它们作为实例变量保存!).
  • javax.servlet.Filter的#的doFilter()

礼貌.
设计模式