Swift设计模式之工厂方法模式

前端之家收集整理的这篇文章主要介绍了Swift设计模式之工厂方法模式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转自

原文

  1. // 工厂方法模式
  2. // 百度百科:是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品
  3. // 设计模式分类:创建型模式
  4.  
  5. /** * 抽象产品(货币) */
  6. protocol Currency {
  7. func symbol() -> String
  8. func code() -> String
  9. }
  10.  
  11. /// 具体产品(欧元)
  12. class Euro : Currency {
  13. func symbol() -> String {
  14. return "€"
  15. }
  16.  
  17. func code() -> String {
  18. return "EUR"
  19. }
  20. }
  21.  
  22. /// 具体产品(美元)
  23. class UnitedStatesDolar : Currency {
  24. func symbol() -> String {
  25. return "$"
  26. }
  27.  
  28. func code() -> String {
  29. return "USD"
  30. }
  31. }
  32.  
  33. /** 国家 - UnitedStates: 美国 - Spain: 西班牙 - UK: 英国 - Greece: 希腊 */
  34. enum Country {
  35. case UnitedStates,Spain,UK,Greece
  36. }
  37.  
  38. /** 具体工厂 */
  39. enum CurrencyFactory {
  40. static func currencyForCountry(country:Country) -> Currency? {
  41.  
  42. switch country {
  43. case .Spain,.Greece :
  44. return Euro()
  45. case .UnitedStates :
  46. return UnitedStatesDolar()
  47. default:
  48. return nil
  49. }
  50.  
  51. }
  52. }
  53.  
  54. let noCurrencyCode = "No Currency Code Available"
  55.  
  56. CurrencyFactory.currencyForCountry(.Greece)?.code() ?? noCurrencyCode
  57. CurrencyFactory.currencyForCountry(.Spain)?.code() ?? noCurrencyCode
  58. CurrencyFactory.currencyForCountry(.UnitedStates)?.code() ?? noCurrencyCode
  59. CurrencyFactory.currencyForCountry(.UK)?.code() ?? noCurrencyCode

猜你在找的Swift相关文章