iOS与java工厂设计模式,欢迎加二维码讨论
2014-10-20 11:22
267 查看
什么是工厂模式
什么时候用工厂模式
工厂模式有那些优缺点
oc与java语法上工厂模式有那些异同及简单的例子
什么是工厂模式
在基类中定义创建对象的一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟到子类中进行。工厂方法要解决的问题是对象的创建时机,它提供了一种扩展的策略,很好地符合了开放封闭原则。工厂方法也叫做虚构造器(Virtual Constructor)。
定义是一个概括,可能比较难懂,其实他就是为了创建对象的,先不要着急慢慢看下去再回来看定义就会豁然开朗。
什么时候用工厂模式
(1)编译时无法确定预期要创建的对象的类;
(2)类想让其子类决定运行时创建什么;
(3)类有若干辅助类为其子类,而你想将返回哪个子类这一信息局部化。
工厂设计模式是面向对象软件设计中应用非常普遍的设计模式。工厂方法从代码中消除了对应用程序特有的耦合。代码只需要处理Product抽象接口。所以同一代码得以复用,在应用程序中与用户定义的任何ConcreteProduct类(具体工厂)一起工作。
我们看一下工厂模式的通用类图:
抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。
抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
oc与java语法上工厂模式有那些异同及简单的例子
我们还是通过例子来看更直观一些:假如易车某个部门有两款产品,他们都是DSA系统,只是里面的素材各有不同,而且他们都是从DSA3.1一个通用的产品,他么要提供给不同的经销商厂商,我们这里模拟一下;
IOS:
一定一个product类
@interface DSAProduct :
NSObject
-(void) myName;
@end
看一下myName的实现
-(void)myName
{
NSLog(@"我是DSA产品");
}
还有相应的子类 我们这里不做任何操作,主要说明工厂模式本身
@interface AudiDSAProduct :
DSAProduct
-(void) myName;
@end
-(void)myName
{
NSLog(@"我是AudiDSA产品");
}
@interface BMWDSAProduct :
DSAProduct
-(void) myName;
@end
-(void)myName
{
NSLog(@"我是BMWDSA产品");
}
接下来是工厂方法
@interface DSAFactory :
NSObject
-(DSAProduct *) factoryMethod;
@end
@implementation
DSAFactory
-(DSAProduct *)factoryMethod
{
//
在此处,子类必须重写factoryMethod方法。当然,在工厂模式中,也可以在此处返回一个默认的Product。
return
nil;
}
@end
具体的工厂
@interface AudiFactory : DSAFactory
@end
@implementation
AudiFactory
-(DSAProduct *)factoryMethod
{
return
[[AudiDSAProduct
alloc]
init];
}
@interface BMWFactory : DSAFactory
@end
@implementation BMWFactory
-(DSAProduct *)factoryMethod
{
return [[BMWDSAProduct alloc] init];
}
@end
我们看一下场景类的实现
//
工厂方法的实例化
DSAFactory *audifactory = [[AudiFactory
alloc]
init];
DSAFactory *bmwfactory
= [[BMWFactory
alloc]
init];
//
通过工厂方法实例化相应的产品
DSAProduct *myproduct = [audifactory
factoryMethod];
[myproduct Myname];
DSAProduct *myproduct
= [bmwfactory
factoryMethod];
[myproduct Myname];
系统会分别打印 我是AudiDSA产品
我是BMWDSA产品,这样写的好处 就是减少了代码的耦合,java里面有一个Spring框架,他就是为了解决耦合,而且他已经帮助我们实现了工厂方法。
简单的说一下java的工厂方法:我们说一下通用的模版
具体的产品类可以有多个,都继承于抽象产品类,其源代码如代码清单8-9所示。
代码清单8-9 具体产品类
抽象工厂类负责定义产品对象的产生,源代码如代码清单8-10所示。
代码清单8-10 抽象工厂类
具体如何产生一个产品的对象,是由具体的工厂类实现的,如代码清单8-11所示。
代码清单8-11 具体工厂类
场景类的调用方法如代码清单8-12所示。
代码清单8-12 场景类
欢迎加入iOS与大数据进行讨论:
什么时候用工厂模式
工厂模式有那些优缺点
oc与java语法上工厂模式有那些异同及简单的例子
什么是工厂模式
在基类中定义创建对象的一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟到子类中进行。工厂方法要解决的问题是对象的创建时机,它提供了一种扩展的策略,很好地符合了开放封闭原则。工厂方法也叫做虚构造器(Virtual Constructor)。
定义是一个概括,可能比较难懂,其实他就是为了创建对象的,先不要着急慢慢看下去再回来看定义就会豁然开朗。
什么时候用工厂模式
(1)编译时无法确定预期要创建的对象的类;
(2)类想让其子类决定运行时创建什么;
(3)类有若干辅助类为其子类,而你想将返回哪个子类这一信息局部化。
工厂设计模式是面向对象软件设计中应用非常普遍的设计模式。工厂方法从代码中消除了对应用程序特有的耦合。代码只需要处理Product抽象接口。所以同一代码得以复用,在应用程序中与用户定义的任何ConcreteProduct类(具体工厂)一起工作。
我们看一下工厂模式的通用类图:
抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。
抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
oc与java语法上工厂模式有那些异同及简单的例子
我们还是通过例子来看更直观一些:假如易车某个部门有两款产品,他们都是DSA系统,只是里面的素材各有不同,而且他们都是从DSA3.1一个通用的产品,他么要提供给不同的经销商厂商,我们这里模拟一下;
IOS:
一定一个product类
@interface DSAProduct :
NSObject
-(void) myName;
@end
看一下myName的实现
-(void)myName
{
NSLog(@"我是DSA产品");
}
还有相应的子类 我们这里不做任何操作,主要说明工厂模式本身
@interface AudiDSAProduct :
DSAProduct
-(void) myName;
@end
-(void)myName
{
NSLog(@"我是AudiDSA产品");
}
@interface BMWDSAProduct :
DSAProduct
-(void) myName;
@end
-(void)myName
{
NSLog(@"我是BMWDSA产品");
}
接下来是工厂方法
@interface DSAFactory :
NSObject
-(DSAProduct *) factoryMethod;
@end
@implementation
DSAFactory
-(DSAProduct *)factoryMethod
{
//
在此处,子类必须重写factoryMethod方法。当然,在工厂模式中,也可以在此处返回一个默认的Product。
return
nil;
}
@end
具体的工厂
@interface AudiFactory : DSAFactory
@end
@implementation
AudiFactory
-(DSAProduct *)factoryMethod
{
return
[[AudiDSAProduct
alloc]
init];
}
@interface BMWFactory : DSAFactory
@end
@implementation BMWFactory
-(DSAProduct *)factoryMethod
{
return [[BMWDSAProduct alloc] init];
}
@end
我们看一下场景类的实现
//
工厂方法的实例化
DSAFactory *audifactory = [[AudiFactory
alloc]
init];
DSAFactory *bmwfactory
= [[BMWFactory
alloc]
init];
//
通过工厂方法实例化相应的产品
DSAProduct *myproduct = [audifactory
factoryMethod];
[myproduct Myname];
DSAProduct *myproduct
= [bmwfactory
factoryMethod];
[myproduct Myname];
系统会分别打印 我是AudiDSA产品
我是BMWDSA产品,这样写的好处 就是减少了代码的耦合,java里面有一个Spring框架,他就是为了解决耦合,而且他已经帮助我们实现了工厂方法。
简单的说一下java的工厂方法:我们说一下通用的模版
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public abstract class Product { //产品类的公共方法 public void method1(){ //业务逻辑处理 } //抽象方法 public abstract void method2(); } |
代码清单8-9 具体产品类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class ConcreteProduct1 extends Product { public void method2() { //业务逻辑处理 } } public class ConcreteProduct2 extends Product { public void method2() { //业务逻辑处理 } } |
代码清单8-10 抽象工厂类
1 2 3 4 5 6 7 8 9 10 11 12 13 | public abstract class Creator { /* * 创建一个产品对象,其输入参数类型可以自行设置 * 通常为String、Enum、Class等,当然也可以为空 */ public abstract Product createProduct(Class<? extends Product> c); } |
代码清单8-11 具体工厂类
public
class
ConcreteCreator
extends
Creator {
public
Product createProduct(Class<?
extends
Product> c) {
Product product=
null
;
try
{
product = (Product)Class.forName(c.getName()).newInstance();
}
catch
(Exception e) {
//异常处理
}
return
product;
}
}
场景类的调用方法如代码清单8-12所示。
代码清单8-12 场景类
public
class
Client {
public
static
void
main(String[] args) {
Creator creator =
new
ConcreteCreator();
Product product = creator.createProduct(ConcreteProduct1.
class
);
/*
* 继续业务处理
*/
}
欢迎加入iOS与大数据进行讨论:
相关文章推荐
- Java设计模式圣经连载(02)-工厂方法(Factory Method)模式
- Java设计模式之工厂模式篇
- 设计模式之一:Java中的简单工厂模式
- Java设计模式之工厂模式
- java设计模式【创建模式】之工厂模式
- 设计模式之Factory,Java工厂方法
- [零基础学JAVA]Java SE应用部分-36.反射机制与工厂设计模式 推荐
- java中的设计模式 工厂 和抽象工厂模式 的例子
- java设计模式之工厂模式(Factory)
- java 设计模式 学习笔记(1) - 简单工厂模式
- Java工厂设计模式论文
- Java 可复用的面向对象的设计模式之 工厂模式Factory详解 :简单工厂模式 工厂方法模式 抽象工厂模式
- JAVA设计模式之-工厂模式
- java 简单工厂设计模式
- JAVA设计模式——简单工厂(Simple Factory)模式
- 我把Black_Cat与Walaqi等关于"设计模式"之"工厂方法""抽象工厂"的讨论整理如下,以方
- JAVA设计模式学习之----创建模式:工厂模式(抽象工厂)
- 追MM与设计模式的JAVA实现-简单工厂方法
- java设计模式之一 工厂模式
- Java设计模式之二 —— 工厂方法