Scala学习整理[第二十七-二十九章 模块化编程和Java]<Programming In Scala>
2017-01-19 15:14
453 查看
第二十七章 模块化编程
package SecondWithProgrammingInScala.Chapter27 import SecondWithProgrammingInScala.Chapter27.SimpleDatabase.FoodCategory /** * 适用对象的模块化编程 * * 即对程序合理的分层和组织 ,将功能划分为一个个模块 ,使之易于修改和替换 ,而对其他模块没有影响 * 就像Java中使用接口衔接程序 ,通过替换实现方法修改底层而不影响使用 * 加上Spring的依赖注入 ,可以很好的分离依赖关系 * * Scala也可以使用Spring ,也提供了自己的备选方案 * abstract class + trait + 组合 ,将底层实现隐藏 ,模块间通过父类/特质进行交互 */ //需要持久化的实例类 abstract class Food(val name: String) { override def toString: String = name } class Recipe(val name: String, val ingredients: List[Food], val instructions: String) { override def toString: String = name } //额外功能抽象 trait FoodCategories { case class FoodCategory(name: String, foods: List[Food]) def allCategories: List[FoodCategory] } //抽象数据库接口 abstract class Database extends FoodCategories { def allFoods: List[Food] def allRecipes: List[Recipe] def foodNamed(name: String): Option[Food] = allFoods.find(_.name == name) } //浏览器抽象 abstract class Browser { val database: Database def recipeUsing(food: Food) = database.allRecipes.filter(recipe => recipe.ingredients.contains(food)) def displayCategory(category: database.FoodCategory) = println(category) } //实现扩展数据库类型 trait SimpleFoods { object Apple extends Food("Apple") object Orange extends Food("Orange") object Cream extends Food("Cream") object Sugar extends Food("Sugar") def allFoods = List(Apple, Orange, Cream, Sugar) } trait SimpleRecipes { this: SimpleFoods => object FruitSalad extends Recipe("Fruit Salad", List(Apple, Orange, Cream, Sugar), "Stir it all together") def allRecipes: List[Recipe] = List(FruitSalad) } object SimpleDatabase extends Database with SimpleFoods with SimpleRecipes { private var categories = List( FoodCategory("fruit", List(Apple, Orange)), FoodCategory("misc", List(Cream, Sugar)) ) def allCategories = categories } object StudentDatabase extends Database { object FrozenFood extends Food("FrozenFood") object HeadItUp extends Recipe("Heat it up", List(FrozenFood), "Microwave the 'food' for 10 minutes") override def allFoods = List(FrozenFood) override def allRecipes = List(HeadItUp) override def allCategories = List(FoodCategory("edible", List(FrozenFood))) } //浏览器入口 object SimpleBrower extends Browser { val database = SimpleDatabase } object StudentBrower extends Browser { val database = StudentDatabase }
第二十八章 对象相等
第二十九章 Scala和Java
Scala和Java同为JVM上的语言 ,经过编译器(翻译器)产生.class文件有着许多的相似之处 .scala的一些方法和类也是直接对应到了Java ,也可以直接在代码中调用Java的东西 .但是反过来 ,Java调用Scala则没有那么理想 ,你必须要了解scala编译后的.class结构 ,并通过Java与之产生联系 .相关文章推荐
- Scala学习整理[第七-九章 函数化编程的函数]<Programming In Scala>
- Scala学习整理[第三十二章 GUI编程]<Programming In Scala>
- Scala学习整理[第二十-二十一章 抽象成员和隐式转换]<Programming In Scala>
- Scala学习整理[第三十章 Actor和并发]<Programming In Scala>
- Scala学习整理[第十四章 测试]<Programming In Scala>
- Scala学习整理[第二十二-二十三章 List和For循环]<Programming In Scala>
- Scala学习整理[第二章 入门Ⅰ]<Programming In Scala>
- Scala学习整理[第三十一章 连接符解析]<Programming In Scala>
- Scala学习整理[第三章 入门Ⅱ]<Programming In Scala>
- Scala学习整理[第二十四-二十六章 抽取器和XML]<Programming In Scala>
- Scala学习整理[第十一-十三章 类型/特质和其应用/包]<Programming In Scala>
- Scala学习整理[总结篇]<Programming In Scala>
- Scala学习整理[第十五章 样本类和模式匹配]<Programming In Scala>
- Scala学习整理[第十章 继承重载应用]<Programming In Scala>
- Scala学习整理[第十七-十八章 集合和有状态对象]<Programming In Scala>
- Scala学习整理[第十九章 泛型和约束系统]<Programming In Scala>
- Scala学习整理[第四-六章 使用Scala运行类/对象]<Programming In Scala>
- Scala学习整理[第十六章 List应用与排序算法]<Programming In Scala>
- Scala学习整理[第一章 可伸缩的语言]<Programming In Scala>
- JAVA基础学习--网络编程<二>