-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathimage_example.dart
63 lines (52 loc) · 1.47 KB
/
image_example.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
abstract class Graphic {
void displayImage();
}
// On System A
class RealImage implements Graphic {
final String _filename;
RealImage(this._filename) {
_loadImageFromDisk();
}
/// Loads the image from the disk
void _loadImageFromDisk() => print("Loading $_filename");
/// Displays the image
void displayImage() => print("Displaying $_filename");
}
// On System B
class ProxyImage implements Graphic {
final String _filename;
RealImage? _image;
ProxyImage(this._filename);
/// Displays the image
void displayImage() {
if (_image == null) {
_image = RealImage(_filename);
} else {
_image!.displayImage();
}
}
}
// Test method
void main(List<String> arguments) {
Graphic image1 = ProxyImage("HiRes_10MB_Photo1");
Graphic image2 = ProxyImage("HiRes_10MB_Photo2");
print("--- image1----");
image1.displayImage(); // loading necessary
image1.displayImage(); // loading unnecessary
print("--- image2----");
image2.displayImage(); // loading necessary
image2.displayImage(); // loading unnecessary
print("--- image1----");
print("image1.displayImage() again = will display without loading ");
image1.displayImage(); // loading unnecessary
}
// Output
// --- image1----
// Loading HiRes_10MB_Photo1
// Displaying HiRes_10MB_Photo1
// --- image2----
// Loading HiRes_10MB_Photo2
// Displaying HiRes_10MB_Photo2
// --- image1----
// image1.displayImage() again = will display without loading
// Displaying HiRes_10MB_Photo1