@@ -11,22 +11,15 @@ Android系统版本: 4.0
11
11
模式的定义
12
12
13
13
通过共享有效支持大量的细粒度对象,节省系统中重复创建相同内容对象的性能消耗,进而提高应用程序的性能。
14
-
15
14
享元模式可分为单纯享元模式和复合享元模式。
16
15
17
16
模式的使用场景
18
17
19
- 面向对象编程在某些情况下会创建大量的细粒度对象,它们的产生,存储,销毁都会造成资源和性能上的损耗,可能会在程序运行时形成
20
- 效率瓶颈,在遇到以下情况时,即可考虑使用享元模式:
21
-
18
+ 面向对象编程在某些情况下会创建大量的细粒度对象,它们的产生,存储,销毁都会造成资源和性能上的损耗,可能会在程序运行时形成效率瓶颈,在遇到以下情况时,即可考虑使用享元模式:
22
19
(1)一个应用程序使用了大量的对象,耗费大量的内存,降低了系统的效率。
23
-
24
20
(2)这些对象的状态可以分离出内外两部分。
25
-
26
21
(3)这些对象按照状态分成很多的组,当把删除对象的外部状态时,可以用相对较少的共享对象取代很多组对象。
27
-
28
22
(4)应用程序不依赖这些对象的身份,即这些对象是不可分辨的。
29
-
30
23
在一般的开发中享元模式并不常用,其常常应用于系统底层的开发,以便解决系统的性能问题。
31
24
32
25
2 . UML类图
@@ -38,9 +31,7 @@ Android系统版本: 4.0
38
31
(1)享元模式如何实现共享
39
32
40
33
将事物的共性共享,同时又保留它的个性。为了做到这点,享元模式中区分了内蕴状态(Internal State)和外蕴状态(External State)。内蕴状态就是共性,外蕴状态就是个性了。
41
-
42
34
内蕴状态存储在享元内部,不会随环境改变而变化,是可以共享的;
43
-
44
35
外蕴状态是不可以共享的,它随环境的改变而变化,通常外蕴状态是由客户端来保持的(因为环境的变化是由客户端引起的)。
45
36
46
37
@@ -49,11 +40,8 @@ Android系统版本: 4.0
49
40
————所有的享元对象都是可以共享的
50
41
51
42
抽象享元(Flyweight)角色 :给出一个抽象接口,以规定出所有具体享元角色需要实现的方法,外蕴状态以参数形式传入此方法。
52
-
53
43
具体享元(ConcreteFlyweight)角色:实现抽象享元角色定义的接口。如果有内蕴状态的话,则必须为内蕴状态提供存储空间。
54
-
55
44
享元工厂(FlyweightFactory)角色:负责创建和管理享元角色,保证享元对象可以被系统适当地共享。当客户端调用一个享元对象的时候 ,享元工厂角色会检查系统中是否已经有一个符合要求的享元对象。如果已经有了,就提供这个已有的享元对象;如果没有,就创建一个 合适的享元对象。
56
-
57
45
客户端角色:维护所有享元对象的引用,同时还需要存储享元对象所对应的外蕴状态。
58
46
59
47
@@ -62,27 +50,17 @@ Android系统版本: 4.0
62
50
————将一些单纯享元使用合成模式加以复合,形成复合享元对象。复合享元对象本身是不能共享的,但是它们可以分解成能够进行共享的单纯享元对象。
63
51
64
52
抽象享元(Flyweight)角色 :给出一个抽象接口,以规定出所有具体享元角色需要实现的方法,外蕴状态以参数形式传入此方法。
65
-
66
53
具体享元(ConcreteFlyweight)角色:实现抽象享元角色定义的接口。如果有内蕴状态的话,则必须为内蕴状态提供存储空间。
67
-
68
- 复合享元(ConcreteCompositeFlyweight)角色:复合享元角色所代表的对象是不可以共享的,但是一个复合享元对象可以分解成能够进行 共享的单纯享元对象。
69
-
54
+ 复合享元(ConcreteCompositeFlyweight)角色:复合享元角色所代表的对象是不可以共享的,但是一个复合享元对象可以分解成能够进行 共享的单纯享元对象。
70
55
享元工厂(FlyweightFactory)角色:负责创建和管理享元角色,保证享元对象可以被系统适当地共享。当客户端调用一个享元对象的时候 ,享元工厂角色会检查系统中是否已经有一个符合要求的享元对象。如果已经有了,就提供这个已有的享元对象;如果没有,就创建一个 合适的享元对象。
71
-
72
56
客户端角色:维护所有享元对象的引用,同时还需要存储享元对象所对应的外蕴状态。
73
57
74
58
实现源码
75
59
76
60
Android源码中的模式实现
77
61
78
62
4 . 优点与缺点
63
+ 优点————大幅度地降低内存中对象的数量,节省系统资源的开销
79
64
80
- 优点
81
-
82
- 大幅度地降低内存中对象的数量,节省系统资源的开销
83
-
84
- 缺点
85
-
86
- 1、为了使对象可以共享,享元模式需要将部分状态外部化,使得系统的逻辑变得复杂。
87
-
88
- 2、读取状态外部化的享元对象,影响了系统速度,使运行时间有所加长。
65
+ 缺点————1、为了使对象可以共享,享元模式需要将部分状态外部化,使得系统的逻辑变得复杂。
66
+ 2、读取状态外部化的享元对象,影响了系统速度,使运行时间有所加长。
0 commit comments