Last active
June 19, 2022 20:11
-
-
Save CoderNamedHendrick/748b63f90dd00856ef8006845d84f7de to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void main(){ | |
final Employee emp1 = Employee(EmployeeTypes.engineer); | |
emp1.work(); | |
} | |
class Employee { | |
late final EmployeeStrategy _strategy; | |
Employee(EmployeeTypes type){ | |
_setStrategy(type); | |
} | |
void _setStrategy(EmployeeTypes type) => _strategy = EmployeeStrategy.init(type); | |
EmployeeStrategy get employee => _strategy; | |
void work(){ | |
employee.work(); | |
} | |
} | |
// Strategy/State class | |
abstract class EmployeeStrategy { | |
factory EmployeeStrategy.init(EmployeeTypes type){ | |
switch(type){ | |
case EmployeeTypes.salesman: | |
return Salesman(); | |
case EmployeeTypes.engineer: | |
default: | |
return Engineer(); | |
} | |
} | |
EmployeeTypes get type; | |
void work(); | |
} | |
class Salesman implements EmployeeStrategy { | |
@override | |
EmployeeTypes get type => EmployeeTypes.salesman; | |
@override | |
void work() { | |
print('Making Sales'); | |
} | |
} | |
class Engineer implements EmployeeStrategy { | |
@override | |
EmployeeTypes get type => EmployeeTypes.engineer; | |
@override | |
void work() { | |
print('Architecting technology'); | |
} | |
} | |
enum EmployeeTypes { | |
salesman, | |
engineer, | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment