Object-C 工厂方法

 1 /*
 2 类工厂方法:用于分配、初始化实例并返回一个它自己实例的方法,允许你使用一个步骤就能创建对象,比如new 方法
 3  用于快速创建对象的类方法, 我们称之为类工厂方法
 4  类工厂方法中主要用于 给对象分配存储空间和初始化这块存储空间
 5 1、是类方法,必须以 + 开头;
 6 2、返回类型是 instancetype/id类型;
 7 3、方法名是首字母小写的类名。
 8 */
 9 //Person.h
10 #import <Foundation/Foundation.h>
11 @interface Person : NSObject
12
13 @property age;
14 //无参工厂类方法
15 + (instancetype)person;
16 //有参数工厂类方法
17 + (instancetype)personWithAge:(int)age;
18 @end
19
20 //Person.m
21 #import "Person.h"
22 @implementation Person
23
24 + (instancetype)person
25 {
26     //return [[Person alloc] init];
27     // 注意: 以后但凡自定义类工厂方法, 在类工厂方法中创建对象一定不要使用类名来创建,要使用self来创建
28     // self在类方法中就代表类对象,谁调用当前方法, self就代表谁
29     return [[self alloc] init];
30 }
31
32 + (instancetype)personWithAge:(int)age
33 {
34     Person *p = [[Person alloc] init];
35     p.age = age;
36     return p;
37 }
38 @end
39
40 //Student.h
41 #import <Foundation/Foundation.h>
42
43 @interface Student : Person
44
45 @property int no;
46
47 @end
48
49 //Student.m
50 #import "Student.h"
51
52 @implementation Student
53
54 @end
55
56 //main.m
57 #import <Foundataion/Foundation.h>
58 #import “Person.h”
59
60 int main(int argc, const char * argv[])
61 {
62
63     Person *p = [Person person];
64     p.age = 44;
65     NSLog(@"age = %i",p.age);
66
67     Student *stu = [Student person];
68     stu.no = 22; //person 方法 要使用self 来创建,否则这里会报错:父类的类中 没有 no 属性,要用self来创建 指向子类Student
69     NSLog(@"age = %i",stu.no);
70
71     return 0;
72 }
时间: 2024-08-04 04:53:03

Object-C 工厂方法的相关文章

设计模式系列---简单工厂、工厂方法、抽象工厂

前言,最近看spring的源代码.发现之前没有完全弄懂(工厂方法.抽象工厂)的区别. spring中代理对象的产生,是通过代理工厂(工厂模式),首先spring中的代理是使用jdk或者cglib的代理,只要看目标类是否实现接口. public class ProxyFactory extends ProxyCreatorSupport { //createAopProxy()方法是通过AopProxyFactory获取AopProxy(JDK,CGLIB) public Object getPr

单例模式和工厂方法模式

单例模式的定义 单例模式(Singleton Pattern)是一个比较简单的模式,其定义如下: Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.) 单例模式通用代码 public class Singleton { private static final Singleton singleton = new Sin

详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)

园子里关于23种设计模式的博文已经可以说是成千上万.车载斗量.屯街塞巷.不计其数.数不胜数.摩肩接踵.汗牛充栋.车水马龙.门庭若市.琳琅满目直至让人眼花缭乱了.在这样的大环境下之所以来写设计模式类的博文,并不是像一些"非主流"的爱情观那样"宁缺毋滥". 只是其一呢,因为相当于给自己做一个总结,加深一下自己这方面的认识,因为掌握了和把它写出来我感觉后者还可以对技能有一个提升,其二呢是因为最近公司有一个内部的training需要讲设计模式. v写在前面 在这里呢,需要向

Python 抽象工厂方法

有没有好的python UML建模工具?求推荐,除eclipse的插件(因为不喜欢用eclipse).pyNsource用的不是很好,pyUt不全.有没StarUML上的python插件? import abc class AbstractEnemyFactory( object ): __metaclass__ = abc.ABCMeta @abc.abstractmethod def createNinja( self ): pass @abc.abstractmethod def crea

设计模式实战应用之五:工厂方法模式

工厂方法模式的定义        工厂方法模式的应用相当广泛. 工厂方法模式在 Java API 中的应用比比皆是:java.util.Collection 接口的 iterator 方法就是一个非常著名的工厂方法模式的演示样例:java.net.URLStreamHandlerFactory 的 createURLStreamHandler(String protocol)  也是工厂方法模式的一个非常经典的应用,URLStreamHandlerFactory 定义了一个用来创建 URLStr

【JavaScript】工厂方法

构造函数,用于构造对象.也叫工厂方式[原料.加工.出厂] 空对象,相当于"原料" 给对象加上属性和方法,相当于"加工" 把对象返回出去,相当于"出厂" //工厂方式[原料.加工.出厂] function createPerson(name,gender){ //构造函数,用于构造对象 var obj=new Object();//空对象,相当于"原料" //给对象加上属性和方法,相当于"加工" obj.na

工厂模式总结(简单工厂,工厂方法,抽象工厂)

工厂模式属于创建型模式,大致可以分为三类,简单工厂模式.工厂方法模式.抽象工厂模式. 通过两个例子讲解这三种工厂模式 示例一 简单工厂模式 首先介绍简单工厂模式,它的主要特点是需要在工厂类中做判断,从而创造相应的产品.当增加新的产品时,就需要修改工厂类.有点抽象,举个例子就明白了.有一家生产处理器核的厂家,它只有一个工厂,能够生产两种型号的处理器核.客户需要什么样的处理器核,一定要显示地告诉生产工厂.下面给出一种实现方案. 1 enum CTYPE {COREA, COREB}; 2 class

创建型模式之工厂方法

工厂方法模式(Factory Method Pattern)又叫虚拟构造函数(Virtual Constructor)模式或多态性工厂(Polymorphic Factory)模式.工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建性工作推迟到子类中. 工厂模式又分为简单工厂.工厂方法和抽象工厂模式. 工厂方法模式,英文原话为:Define an interface for creating an object, but let subclasses decide which cla

《Spring揭秘》(三)---- 工厂方法与FactoryBean

面向接口编程时,虽然对象可以通过声明接口来避免对特定接口实现类的过渡耦合,但总归需要一种方式将生命依赖接口的对象与接口实现类关联起来. 问题背景: public class Foo { private BarInterface barInterface; public Foo() { barInstance = new BarInterfaceImpl(); } } 这样接口与实现类的耦合性很高. 如果BarInterfaceImpl类是我们设计开发的,可以直接通过依赖注入,让容器帮助我们解除接

(转)设计模式(五)简单工厂模式+工厂方法模式

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象实例的细节和