Java中的设计模式

原文:http://www.importnew.com/12526.html

本文由 ImportNew - 刘 家财 翻译自 stackoverflow。欢迎加入Java小组。转载请参见文章末尾的要求。

提问:我正在学习GoF的《设计模式》,想了解些它们在实际中的应用的例子。大家能给我举一些使用设计模式的好例子吗?尤其是在Java类库中。

赞同最高的回答:

你可以通过Wikipedia对设计模式有个整体上的理解。Wikipedia上也提高了GoF所涉及到的模式。我这里总结一下,并且尽可能指出在JavaSE与JavaEE的API中是如何运用这些模式的。

创建型设计模式

抽象工厂模式

特点:创建方法返回一个可以用来创建抽象类或接口的工厂类。

生成器模式

特点:创建方法返回这个实例本身。

工厂方法模式

特点:创建方法返回抽象类或接口的实现。

原型模式

特点:创建方法返回一个同类型且具有相同属性的另一个实例。

单例模式

特点:创建方法返回同一个实例(无论在何时调用)。

结构型模式

适配器模式

特点:创建方法接受一个与当前类不同的抽象类或接口的实例作为参数,返回一个经过修饰或重写给定参数实例的抽象类或接口的实现。

桥接模式

特点:创建方法接受一个与当前类不同的抽象类或接口的实例作为参数,返回一个经过代理或使用给定参数实例的抽象类或接口的实现。

  • 暂时没有想到,一个可以想到的例子是new LinkedHashMap(LinkedHashSet, List),这个方法返回一个不可修改的linkedMap,它就没有拷贝参数中的元素(item),而是直接使用它们。java.util.Collections#newSetFromMap()singletonXXX()方法也与之类似。

组合模式

特点:行为方法把相同抽象类或接口的实例转化为一个树结构。

装饰模式

特点:创建方法以一个抽象类或接口的实例为参数,返回值是增加了额外方法的给参数实例。

外观模式

特点:行为方法在内部使用完全不同的抽象类或接口的实例做封装。

享元模式

特点:创建方法返回一个缓存的实例,与多例模式有些类似。

代理模式

特点:创建方法返回一个给定抽象类或接口的实例,这个实例代理或使用了这个给定抽象类或接口的另一个实现。

恕我直言,Wikipedia上的类子不是很好,惰性加载实际上和代理模式一点关系也没有。

行为模式

职责链模式

特点:行为方法间接调用队列中同一抽象类或接口的另一实例的同名方法。

命令模式

特点:一个抽象类或接口中的行为方法调用另一个在创建时经命令方法包装的抽象类或接口实现的另一个方法。

解释器模式

特点:行为方法返回结构上不同的抽象类或接口的实例,需要注意的是解析或格式化过程并不是这个模式的一部分,而这个过程决定了解释器如何将要去应用并实施这个变换。

迭代模式

特点:行为方法连续地返回队列中的相同对象的不同实例。

中介者模式

特点:行为方法接受一个不同的抽象类或接口的实例(一般使用命令模式)作为参数,而这个参数同时也代理了其它给定抽象类或接口的实例。

备忘模式

特点:行为方法在内部改变整个实例的状态。

观察者(发布/订阅)模式

特点:行为方法根据其自身的状态,去调用另一个抽象类或接口实例的方法。

状态模式

特点:行为方法根据它能够控制的状态来变自身的行为。

策略模式

特点:在一个抽象类或接口的行为方法会调用作为一种策略实现而通过参数传入的另一个抽象类或接口实例的方法。

模板方法模式

特点:具有由抽象类型定义默认行为的行为方法。

访问者模式

特点:由两个不同的抽象类或接口,它们都有接受对方做参数的方法,被调用的方法会去调用另一个对象的方法,然后根据制定好的策略执行。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java是一种强大的编程语言,它提供了许多不同类型的设计模式来帮助开发人员编写更加模块化、可扩展和易于维护的代码。 以下是一些Java常用的设计模式: 1. 单例模式(Singleton Pattern):保证一个类只有一个实例,并提供一个全局访问点。 2. 工厂模式(Factory Pattern):使用工厂方法来创建对象,而不是直接调用构造函数。 3. 抽象工厂模式(Abstract Factory Pattern):提供一个接口来创建一系列相关或依赖对象的工厂,而不需要指定它们的具体类。 4. 观察者模式(Observer Pattern):定义对象之间的一对多的依赖关系,当一个对象改变状态时,它的所有依赖对象都会收到通知并自动更新。 5. 适配器模式(Adapter Pattern):将一个类的接口转换成另一个客户端所期望的接口,从而使得原本不兼容的类能够协同工作。 6. 模板方法模式(Template Method Pattern):定义一个算法的骨架,将一些步骤延迟到子类实现,使得子类可以改变算法的某些特定步骤,而不改变算法的整体结构。 7. 装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,同时又不改变其原有的结构。 8. 迭代器模式(Iterator Pattern):提供一种方法访问一个容器对象各个元素,而又不暴露该对象的内部细节。 9. 策略模式(Strategy Pattern):定义一系列的算法,将它们封装起来,并使它们可以互相替换,从而使得算法的变化独立于使用它们的客户端。 10. 命令模式(Command Pattern):将一个请求封装成一个对象,从而使得可以用不同的请求对客户端进行参数化,并支持可撤销的操作。 以上只是一些Java常用的设计模式,不过Java还有许多其他类型的设计模式可以用来帮助解决各种问题。在实际开发,根据具体的需求和情况选择合适的设计模式非常重要。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值