Skip to content

Commit caea3ca

Browse files
committed
Impl facade pattern.
2 parents 435e111 + 46504b5 commit caea3ca

File tree

16 files changed

+221
-2
lines changed

16 files changed

+221
-2
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 0.37.0
2+
- Add iterator pattern: Word Iterator.
3+
14
## 0.36.0
25
- Add iterator pattern: Github Commit.
36

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ It contains **Dart** examples for all classic **GoF** design patterns.
1313
- [x] **Chain of Responsibility** - [[Server Middleware](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/chain_of_responsibility/server_middleware)]
1414
- [x] **Command** - [[Conceptual](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/command/conceptual)] [[Text Editor](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/command/text_editor)]
1515
- [x] **Interpreter** - [[Conceptual](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/interpreter/conceptual)]
16-
- [x] **Iterator** - [[Github Commit](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/iterator/github_commit)]
16+
- [x] **Iterator** - [[Word Iterator](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/iterator/word_iterator)] [[Github Commit](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/iterator/github_commit)]
1717
- [x] **Mediator** - [[Conceptual](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/mediator/conceptual)]
1818
- [x] **Memento** - [[Conceptual](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/memento/conceptual)] [[![16x16](https://user-images.githubusercontent.com/8049534/171852337-57db0faf-1f5e-489a-a79a-22ed4f47b4ed.png) Memento Editor](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/memento/memento_editor)]
1919
- [x] **Observer** - [[Open-Close Editor Events](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/observer/open_close_editor_events)] [[AppObserver](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/observer/app_observer)] [[![16x16](https://user-images.githubusercontent.com/8049534/171852337-57db0faf-1f5e-489a-a79a-22ed4f47b4ed.png) Subscriber Flutter Widget](https://github.com/RefactoringGuru/design-patterns-dart/tree/main/patterns/observer/subscriber_flutter_widget)]

patterns/facade/conceptual/main.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// ignore_for_file: unused_local_variable
2+
3+
import 'pattern/video_conversion_facade.dart';
4+
5+
void main() {
6+
final converter = VideoConversionFacade();
7+
final mp4Video = converter.convertVideo("youtubevideo.ogg", "mp4");
8+
// ...;
9+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import 'dart:io';
2+
3+
import '../some_complex_media_library/audio_mixer.dart';
4+
import '../some_complex_media_library/bitrate_reader.dart';
5+
import '../some_complex_media_library/codec.dart';
6+
import '../some_complex_media_library/codec_factory.dart';
7+
import '../some_complex_media_library/mpeg4_compression_codec.dart';
8+
import '../some_complex_media_library/ogg_compression_codec.dart';
9+
import '../some_complex_media_library/video_file.dart';
10+
11+
class VideoConversionFacade {
12+
File convertVideo(String fileName, String format) {
13+
print('VideoConversionFacade: conversion started.');
14+
final file = VideoFile(fileName);
15+
final sourceCodec = CodecFactory.extract(file);
16+
late final Codec destinationCodec;
17+
18+
if (format == "mp4") {
19+
destinationCodec = MPEG4CompressionCodec();
20+
} else {
21+
destinationCodec = OggCompressionCodec();
22+
}
23+
24+
final buffer = BitrateReader.read(file, sourceCodec);
25+
final intermediateResult = BitrateReader.convert(buffer, destinationCodec);
26+
final result = AudioMixer().fix(intermediateResult);
27+
print('VideoConversionFacade: conversion completed.');
28+
29+
return result;
30+
}
31+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import 'dart:io';
2+
3+
import 'video_file.dart';
4+
5+
class AudioMixer {
6+
File fix(VideoFile result) {
7+
print('AudioMixer: fixing audio...');
8+
return File('tmp');
9+
}
10+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import 'codec.dart';
2+
import 'video_file.dart';
3+
4+
class BitrateReader {
5+
static VideoFile read(VideoFile file, Codec codec) {
6+
print('BitrateReader: reading file...');
7+
return file;
8+
}
9+
10+
static VideoFile convert(VideoFile buffer, Codec codec) {
11+
print('BitrateReader: writing file...');
12+
return buffer;
13+
}
14+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
abstract class Codec {}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import 'codec.dart';
2+
import 'mpeg4_compression_codec.dart';
3+
import 'ogg_compression_codec.dart';
4+
import 'video_file.dart';
5+
6+
class CodecFactory {
7+
static Codec extract(VideoFile file) {
8+
String type = file.codecType;
9+
if (type == 'mp4') {
10+
print('CodecFactory: extracting mpeg audio...');
11+
return MPEG4CompressionCodec();
12+
} else {
13+
print('CodecFactory: extracting ogg audio...');
14+
return OggCompressionCodec();
15+
}
16+
}
17+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import 'codec.dart';
2+
3+
class MPEG4CompressionCodec implements Codec {
4+
String type = 'mp4';
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import 'codec.dart';
2+
3+
class OggCompressionCodec implements Codec {
4+
final type = 'ogg';
5+
}

0 commit comments

Comments
 (0)