Scala设计模式.pdf

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Scala设计模式

Scala设计模式­­­@CrazyJvm 译         本文展示了一些经典的软件设计模式在Scala中的实现。         所谓设计模式 ,就是针对在软件设计过程中出现的一些共性问题 ,从而产生的一种可重用 的解决方案。设计模式不是已完成的代码 ,而更像是一个可以在不同场景下解决问题的通用模 板。         模式是由一些设计的最佳实践组成的 ,可以帮助我们避免一些问题 ,并且能增加代码的可 读性 ,及加快开发进度。         经典的设计模式(一般指GoF)都是基于面向对象的。他们展示了类与对象间的关系和行 为。这些模式并不能很好的应用到纯函数式编程语言上 ,但是既然Scala是一种结合了面向对象 编程和函数式编程的语言 ,那Scala还是能够采用这些模式的 ,甚至是在函数式风格的Scala代 码中。         很多时候设计模式被认为是某种语言缺乏一些特性的信号。在此种情况下 ,当一种语言提 供了相关特性以后 ,这些模式可以被简化或者索性消除。得益于Scala富有表现力的语法 ,很多 经典设计模式都可以直接实现。         尽管Scala还有一些基于语言特性的设计模式 ,单本文还是着重于介绍大家所周知的经典设 计模式 ,因为这些设计模式被认为是开发者之间交流的工具。 ● 创建型设计模式              1、工厂方法模式              2、延迟加载模式              3、单例模式 ● 结构型模式              1、适配器模式              2、装饰模式 ● 行为型模式              1、值对象模式  2、空值模式              3、策略模式              4、命令模式              5、责任链模式              6、依赖注入模式 一、工厂方法模式         工厂方法模式将对实际类的初始化封装在一个方法中,让子类来决定初始化哪个类。         工厂方法允许 :         1、组合复杂的对象创建代码         2、选择需要初始化的类         3、缓存对象         4、协调对共享资源的访问         我们考虑静态工厂模式 ,这和经典的工厂模式略有不同,静态工厂方法避免了子类来覆盖 此方法。         在Java中,我们使用new关键字 ,通过调用类的构造器来初始化对象。为了实现这个模式 1 ,我们需要依靠普通方法 ,此外我们无法在接口中定义静态方法 ,所以我们只能使用一个额外 的工厂类。 Java: public interface Animal {} private class Dog implements Animal {} private class Cat implements Animal {} public class AnimalFactory {     public static Animal createAnimal(String kind) {         if (cat.equals(kind)) return new Cat();         if (dog.equals(kind)) return new Dog();         throw new IllegalArgumentException();     } } AnimalFactory.createAnimal(dog); 除了构造器之外 ,Scala提供了一种类似于构造器调用的特殊的语法 ,其实这就是一种简便的工 厂模式。 Scala: trait Animal private class Dog extends Animal private class Cat extends Animal object Animal {   def apply(kind: String)   kind match {     case dog   new Dog()     case cat   new Cat()   } } Animal(dog) 以上代码中,工厂方法被定义为伴生对象 ,它是一种特殊的单例对象 ,和之前定义的类或特

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档