天天看点

iOS:个人浅谈工厂模式一、什么是工厂方法?

正式的解释是:在基类中定义创建对象的一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟到子类中进行。工厂方法要解决的问题是对象的创建时机,它提供了一种扩展的策略,很好地符合了开放封闭原则。工厂方法也叫做虚构造器(Virtual Constructor)。

个人的拙见是:通过工厂方法创建工厂对象,然后在工厂类中定义创建基类的子类对象的方法并通过外部传入的条件判断去创建哪一个子类对象,不过由于OC是运行时语言,所以工厂类虽然提供了创建子类对象的方法,但是在编译时期并不能确定对象类型,编译时期创建的子类对象类型是基类类型,真正的类型在运行时期由子类来确定,也即此时确定为子类类型。

(1)存在继承关系

(2)运用了多态的特性

优点:极大地优化了代码,如果需要100个子类对象,不用再一直调用alloc方法去创建,而是直接通过其工厂类的一句代码即可实现,提高了对代码的复用性。同时,也可以将大量的操作放到工厂类中去处理,业务类中只负责去调用创建需要的对象即可。

缺点:因为它的实现条件之一必须存在继承关系,所以模式中工厂类集中了所有的创建逻辑,形成一个庞大的全能类,当所有的类不是继承自同一个父类的时候扩展比较困难。

工厂类:PersonFactory

iOS:个人浅谈工厂模式一、什么是工厂方法?
iOS:个人浅谈工厂模式一、什么是工厂方法?
iOS:个人浅谈工厂模式一、什么是工厂方法?
iOS:个人浅谈工厂模式一、什么是工厂方法?

基类:Person(里面提供的方法都被子类重写)

iOS:个人浅谈工厂模式一、什么是工厂方法?
iOS:个人浅谈工厂模式一、什么是工厂方法?
iOS:个人浅谈工厂模式一、什么是工厂方法?
iOS:个人浅谈工厂模式一、什么是工厂方法?

子类教师类:Teacher(重写基类方法的同时,也可以定义属于自己的新的方法)

iOS:个人浅谈工厂模式一、什么是工厂方法?
iOS:个人浅谈工厂模式一、什么是工厂方法?
iOS:个人浅谈工厂模式一、什么是工厂方法?
iOS:个人浅谈工厂模式一、什么是工厂方法?

子类学生类:Student(重写基类方法的同时,也可以定义属于自己的新的方法)

iOS:个人浅谈工厂模式一、什么是工厂方法?
iOS:个人浅谈工厂模式一、什么是工厂方法?
iOS:个人浅谈工厂模式一、什么是工厂方法?
iOS:个人浅谈工厂模式一、什么是工厂方法?

main.m演示如下:

iOS:个人浅谈工厂模式一、什么是工厂方法?
iOS:个人浅谈工厂模式一、什么是工厂方法?

打印结果:

iOS:个人浅谈工厂模式一、什么是工厂方法?
iOS:个人浅谈工厂模式一、什么是工厂方法?

本人原创,此处是自己对知识的回炉,如果理解有误,请大家不吝赐教,对我进行斧正。

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!

本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/6216246.html,如需转载请自行联系原作者

继续阅读