android 三种工厂模式,[Android]三种出厂模式的摘要.

b9b80b382c846bc6b85d06f761611fa2.png

在Android中,工厂模式分为三种类型: 简单工厂模式,工厂方法模式和抽象工厂模式.

一个. 简单的工厂模式.

定义: 简单的工厂模式也称为静态方法模式(因为工厂类定义了静态方法);简单工厂模式可以理解为负责生产对象的类安卓工厂模式,称为“工厂类”.

摘要: 混凝土产品具有共同的母产品. 只有一个Factory类,没有子级父类. 通过将不同的参数传递给Factory的静态方法,可以返回不同的混凝土产品.

摘要: 抽象产品类别可以派生多个特定的产品类别. 通过将不同的参数传递到该工厂的静态方法中,特定的工厂类将生成不同的特定产品类实例.

1fff38f64e30bebf6e08062d31eec0b5.png

简单的工厂模式UML类图

好处:

1. 将创建实例的工作与使用实例的工作分开,用户不需要关心如何创建类对象,实现去耦;

2. 将初始化实例的工作放在工厂中可以使代码更易于维护. 更符合面向对象和面向接口编程的原理,而不是面向实现的编程.

缺点:

3ef41050d1d21bb9676bdb97c047da.jpg

1. 工厂类集中了所有实例(产品)的创建逻辑. 一旦该工厂无法正常工作,整个系统将受到影响;

2. 违反“开闭原理”,一旦添加新产品,就必须修改工厂类的逻辑,这将导致工厂逻辑过于复杂.

3. 简单的工厂模式因为使用了静态工厂方法,所以静态方法不能被继承和重写,这将导致工厂角色无法基于继承形成层次结构.

第二种工厂方法模式

定义: 工厂方法模式,也称为工厂模式,多态工厂模式和虚拟构造函数模式. 通过定义工厂父类,它负责定义用于创建对象的公共接口,而子类负责生成特定的对象.

摘要: 混凝土产品具有共同的父产品,混凝土工厂也具有共同的母工厂. 每个混凝土子类的混凝土工厂都会生产相应的混凝土产品.

摘要:

抽象产品类可以派生多个特定的产品类. 抽象工厂类可以派生多个具体工厂类. 每个特定的工厂类只能创建一个特定产品类的实例.

219b70e4c9564784c488b5e82f2db5ec.png

工厂方法模式UML类图

好处:

20130820092544602.jpg

1. 更符合开闭原则

添加新产品时,只需添加相应的特定产品类别和相应的工厂子类别,简单的工厂模型就需要修改工厂类别的判断逻辑

2. 遵守单一责任原则

每个特定的工厂类别仅负责创建相应的产品,而简单工厂中的工厂类别具有复杂的开关逻辑判断

3. 不使用静态工厂方法,就可以形成基于继承的层次结构,简单工厂模式的工厂类使用静态工厂方法

总结: 工厂模式可以说是对简单工厂模式的进一步抽象和扩展,同时保留了简单工厂的封装优势,使扩展简单,使继承可行并增加了多态性的表达.

缺点:

1. 添加新产品时,除了添加新产品类别外,还必须提供与之对应的特定工厂类别. 系统类别的数量将成对增加,从而在一定程度上增加系统的复杂性;同时,需要编译和运行更多的类,这将给系统带来一些额外的开销;

2. 由于系统的可伸缩性,需要引入抽象层. 客户层代码中使用抽象层进行定义,这增加了系统的抽象性和理解难度,在实现,反射等技术时可能需要使用DOM,从而增加了系统实现的难度.

3. 尽管可以保证关闭工厂方法的修改,但是对于使用工厂方法的类,如果要替换其他产品,则仍需要修改实例化的特定工厂类;

4. 一个特定的工厂只能创建一个特定的产品

a9ef4eda9b049513608d249796c09f98.jpg

三个抽象的工厂模式

定义: 抽象工厂模式或抽象工厂模式提供了一个接口,用于创建一系列相关或相互依赖的对象,而无需指定其特定类;特定的工厂负责实施特定的产品实例.

摘要:

抽象工厂模式引入了抽象产品族的概念抽象产品,它是所有产品的父类,其次是产品抽象类,它是抽象产品的子类,是特定产品类的父类. . 不同的类型(例如产品A,产品B和更下层)是特定的产品类别,具体产品类别为混凝土产品A,混凝土产品B;

混凝土工厂具有一个公共的父类抽象工厂. 每个具体的混凝土工厂都可以生产许多不同的产品. 例如,工厂1可以生产混凝土产品A1,混凝土产品B1,工厂2可以生产混凝土A2,混凝土B2.

摘要:

多个抽象产品类别,每个类别都可以派生多个特定的产品类别. 抽象工厂类可以派生多个具体工厂类. 每个特定的工厂类可以创建特定产品类的多个实例.

7f9a0fc88de19978d1cc77e610124a23.png

抽象工厂模式UML类图

好处:

1,减少耦合

抽象工厂模式将特定产品的创建延迟到特定工厂的子类中. 这封装了对象的创建,从而减少了客户端与特定产品类之间的依赖性,从而导致系统耦合程度较低. 有利于以后的维护和扩展;

2. 更符合开闭原则

添加新产品类别时,只需添加相应的特定产品类别和相应的工厂子类别,简单的工厂模型就需要修改工厂类别的判断逻辑

3. 符合单一责任原则

4. 每个特定的工厂类别仅负责创建相应的产品,而简单工厂中的工厂类别具有复杂的开关逻辑判断

5. 不使用静态工厂方法,就可以形成基于继承的层次结构,简单工厂模式的工厂类使用静态工厂方法

缺点:

抽象工厂模式很难支持新型产品的变更.

这是因为抽象工厂界面已确定可以创建的产品集. 如果需要添加新产品,则必须修改抽象工厂的接口,该接口涉及抽象工厂类和所有子类. 进行更改安卓工厂模式,从而违反了“关闭开发”的原则.

摘要:

简单工厂模式: 抽象产品类可以派生多个特定的产品类. 通过将不同的参数传递到该工厂的静态方法中,特定的工厂类将生成不同的特定产品类实例.

工厂方法模式: 抽象产品类可以派生多个特定的产品类. 抽象工厂类可以派生多个具体工厂类. 每个特定的工厂类只能创建一个特定产品类的实例.

抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生多个特定的产品类. 抽象工厂类可以派生多个具体工厂类. 每个特定的工厂类可以创建特定产品类的多个实例.

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/shouji/article-280179-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值