Skip to content

Commit 8e0485f

Browse files
committed
Impl flyweight conceptual pattern.
1 parent f3b2ce7 commit 8e0485f

File tree

5 files changed

+78
-0
lines changed

5 files changed

+78
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// ignore_for_file: non_constant_identifier_names
2+
3+
import 'pattern/flyweight_factory.dart';
4+
5+
void main() {
6+
final factory = FlyweightFactory();
7+
8+
final one = factory.create('one');
9+
one.draw();
10+
11+
final ONE = factory.create('ONE');
12+
ONE.draw();
13+
14+
final OnE = factory.create('OnE');
15+
OnE.draw();
16+
17+
final two = factory.create('two');
18+
two.draw();
19+
20+
final Two = factory.create('Two');
21+
Two.draw();
22+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class ShareParams {
2+
final int param1;
3+
final String param2;
4+
final double param3;
5+
6+
ShareParams(this.param1, this.param2, this.param3);
7+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import '../params/share_params.dart';
2+
3+
class Flyweight {
4+
final String localParam;
5+
final ShareParams shareParams;
6+
7+
Flyweight(this.localParam, this.shareParams);
8+
9+
void draw() {
10+
print('Flyweight(');
11+
print('\tlocalParam: "$localParam", shareParam: ('
12+
'${shareParams.param1}, '
13+
'"${shareParams.param2}", '
14+
'${shareParams.param3})');
15+
print(')');
16+
}
17+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import 'flyweight.dart';
2+
import '../params/share_params.dart';
3+
import '../utils/fake_value.dart';
4+
5+
class FlyweightFactory {
6+
Flyweight create(String localParam) {
7+
final shareParams = _shares.putIfAbsent(
8+
localParam.toLowerCase(),
9+
() => ShareParams(
10+
fakeInt,
11+
fakeString,
12+
fakeDouble,
13+
),
14+
);
15+
16+
return Flyweight(localParam, shareParams);
17+
}
18+
19+
final _shares = <String, ShareParams>{};
20+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import 'dart:math';
2+
3+
String str = 'abcdef';
4+
get fakeString {
5+
final char = str[Random().nextInt(str.length - 1)];
6+
str = str.replaceFirst(char, '');
7+
return char;
8+
}
9+
10+
get fakeInt => Random().nextInt(100);
11+
12+
get fakeDouble => Random().nextInt(100) / 100;

0 commit comments

Comments
 (0)