设计模式:工厂在收费系统中的应用

 

抽象工厂(Abstract Factory):提供一个创建一系列相关或相互依赖对象的结构,而无需指定他们具体的类。

抽象工厂UML图:

 

  AbstractProductAAbstractProductB是两个抽象产品,它们可能是两种不同的实现。在机房收费系统中可以理解为对两个表的不同操作。

         ProductA1ProductB1可以理解为sql的操作,ProductA2ProductB可以理解为access的操作。因为ProductA1ProductB1是依赖ConcreateFactory1,所以ConcreteFactory1可以理解为sqlFactory,同理右边ConcreteFactory1(应该为ConcreteFactory2)可以理解为AccessFactory

         通常是在运行时刻在创建一个ConcreteFactory类的实例,这个工厂在创建特定的产品对象,为创建不同的产品对象,客户端应使用不同的具体工厂。

         在机房收费系统中:

 

 

  通过工厂创建了借口,去实现接口。就相当于上图中的ConcreteFactory1去创建了ProductA1ProductB1。这里我没有抽象,只是用了抽象工厂的一部分功能,这里的dalFactorysqldalFactory,如果存在将来把数据库换成oracle,就可以抽象出一个抽象的工厂,就是上图中的AbstractFactory。在有不同的实现,从而实现出oracleFactorydalInterface中的一些抽象和实现和工厂是同理的。

         这样做的好处就是易于交换产品系列,是变化数据库变得更简单。

        

         看到了抽象工厂,又重新看了一遍工厂模式还有简单工厂模式。

         简单工厂:


  这个简单工厂很简单了,只是利用简单工厂中的select case根据不同的条件去创造不同的类。如果添加其他操作,必须修改工厂,这个违反了开放封闭原则。而工厂模式很好的克服了这一困难。

         工厂模式:

         UML

 

 在工厂模式中,把原来的简单工厂变成了抽象工厂。如果添加一个新的功能,只需在抽象工厂的下面添加一个子类,去继承抽象工厂,从而解决了简单工厂中的添加功能问题。这里只需添加,而不用去修改原来的工厂。

         简单工厂的好处是自动判断了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类。

         而抽象工厂比工厂模式只是在具体实现的时候又多了一个抽象,可能这样说不是很专业。可以理解为具体工厂在实例化一些类时,被实例化的这些类之间有一些相关的联系,从而在实例化的类之间在抽象出抽象类。

 工厂这个东西看似简单,但是往往简单的东西包含着大道理。千万别小觑它。

 

  PS:部分UML图来自《大话设计模式》

 

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值