语言与模式-03抽象工厂模式

本文介绍了一种设计模式——工厂模式的应用场景与实现方式。通过该模式可以在不指定具体类的情况下创建一系列相关或相互依赖的对象。文章提供了Java和Clojure两种语言的实现案例,并解释了在何种情况下使用该模式最为合适。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

意图

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

适用性

  • 一个系统要独立于它的产品的创建、组合和表示时。
  • 一个系统要由多个产品系列中的一个来配置时。
  • 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
  • 当你提供一个产品类库,而只想显示它们的接口而不是实现时。

Java实现

表现在代码层面就是一个工厂可以返回多个不同的实例!

比如:Pig不仅分颜色,还分国家,比如荷兰Pig,新西兰Pig。

public class RedPigFactory implements PigFactory{
     public Pig getNetherlandsPig(){
          return new RedNetherlandsPig();
     }

     public Pig getNewZealandPig(){
          return new RedNewZealandPig();
     }
}

Clojure实现

而在Clojure中就是选择函数的条件多了!

(defmulti run (fn [t] t))

(defmethod run
  [:RedPig :Netherlands]
  [t]
  (println "Netherlands RedPig run"))

(defmethod run
  [:GreenPig :Netherlands]
  [t]
  (println "Netherlands GreenPig run"))

(defmethod run
  [:BluePig :Netherlands]
  [t]
  (println "Netherlands BluePig run"))

(defmethod run
  [:RedPig :NewZealand]
  [t]
  (println "NewZealand RedPig run"))

(defmethod run
  [:GreenPig :NewZealand]
  [t]
  (println "NewZealand GreenPig run"))

(defmethod run
  [:BluePig :NewZealand]
  [t]
  (println "NewZealand BluePig run"))

(run [:BluePig :Netherlands])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值