设计模式 抽象工厂

抽象工厂类似于工厂方法,只不过是创建多种产品,比如显卡分为三星的,华硕的,东芝的。而声卡也分为三星的,华硕的,东芝的,那么我们可以创建一个抽象工厂,它的子类是三星工厂,华硕工厂,东芝工厂,每个工厂有两个方法,分为生产自己品牌的显卡和声卡。

在运行的时候,创建一个ConcreteFactory实例,那么具体的工厂再创建具有特定实现的产品对象,也就是说,为创建不同的产品对象,客户端应该使用不同的具体工厂。最大的好处在于可以方便的交换产品系列,在一个应用中只要初始化的时候出现一次,只要改变具体的工厂即可使用不同的产品配置,而且我们客户端完全看不到具体实现,拿到的产品都是抽象的,方便我们利用多态。只是还有缺憾:因为我们的ConcreteFactory不一定是全局单实例的,如果不是单实例的,那么程序中可能会有多次实例化工厂,进而拿到具体的产品,这样如果我们哪一天换掉了实现,那么肯定遍布程序的具体工厂都要改,这非常丑陋。

现在我们运用反射。将具体的工厂名字放在配置文件里。具体做法如下:

这个东东实际上是用简单工厂+抽象工厂。简单工厂主要用来动态生成一个子类,向外暴露一个基类,而抽象工厂用来构造来给简单工厂使用的抽象层次,简单工厂的if-else可以考虑用反射技术来去除。

工厂方法和抽象工厂基本是一样的。

这样我们去除了if-else,而且我们的程序,连具体的工厂也看不见了,完全基于抽象来编程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值