设计模式——工厂方法、抽象工厂模式

 

问题的提出:

在业务逻辑中往往有需要创建对象的需求;

如何将这部分逻辑封装并且使得其能个适应于频繁的变化呢?

 

解决方案一:

简单工厂模式

将对象创建逻辑封装隔离在简单工厂类的方法中。

简单工厂的常见实现方式

1)简单工厂类以及其创建对象的静态方法;其客户可以直接调用该类的静态方法。

2)简单工厂类以及其创建对象的成员方法;其客户代码需要依赖于这个简单工厂类,首先创建其实例,然后调用创建对象的方法。

好处和不足

对象创建逻辑仅仅是被封装起来,可供复用并与业务代码解耦。

但是创建对象的逻辑本身还是不易于扩展,不能适应于变化。

 

 

解决方案二:

定义了一个创建对象的接口,有子类决定决定如何创建对象完成实例化。工厂方法模式将类创建对象的逻辑推迟到了子类。

工厂方法模式

业务逻辑中有需要创建的需求,那么就把这部分代码抽象成为一个对象创建者Creator;

即客户代码逻辑流程中某个步骤中需要创建一些对象,那么把这部分创建对象的逻辑封装成为一个抽象方法——即工厂方法;

为了解决简单工厂模式的不足,每个对象创建者的工厂方法由其子类来实现,这样面对变化时只要有不同的子类继承实现Creator的工厂方法,就可以解决创建对象逻辑本身的变化问题

工厂方法模式类图

引用:http://danielzzu.blog.163.com/blog/static/11851530420112311303240/

Product
        定义工厂方法所创建的对象的接口,也就是实际需要使用的对象的接口。
ConcreteProduct:
        具体的Product接口的实现对象。
Creator:
        创建器,声明工厂方法,工厂方法通常会返回一个Product类型的实例对象,而且多是抽象方法。也可以在Creator里面提供工厂方法的默认实现,让工厂方法返回一个缺省的Product类型的实例对象。
ConcreteCreator:
        具体的创建器对象,覆盖实现Creator定义的工厂方法,返回具体的Product实例。

 

解决方案三:

 

抽象工厂模式

抽象工厂的任务是定义一个负责创建一组产品的接口。

这个接口中的每个方法创建一个具体的产品,利用抽象工厂的子类类实现每个方法。——而这里可以看出体现了工厂方法模式的思想

抽象工厂模式类图

引用:http://blog.csdn.net/ipqxiang/article/details/1955677

抽象工厂不足

当创建一组产品的接口要求的产品变化时,相关实现也要变化。

 

最佳实践

工厂方法和抽象工厂模式区别

1)应用场景不同:创建一个产品、创建一组相关、依赖产品;

2)模式形式不同:工厂方法——继承;抽象工厂——组合

实践中工厂方法有两种形式

1)如果一个工厂方法只会创建一种对象,则无参数。

2)如果一个工厂方法会选择的从一堆对象中创建一个对象,则为参数化的工厂方法。

实践中常用的

1)简单工厂模式——如果仅仅需要隔离对象创建逻辑的话。

2)抽象工厂方法模式——使用组合的方式,使用应该多过工厂方法模式。

 

TODO

常见应用框架中对于工厂方法模式、抽象工厂模式的应用举例

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值