Skip to content

Instantly share code, notes, and snippets.

@CoderNamedHendrick
Last active June 19, 2022 20:11
Show Gist options
  • Save CoderNamedHendrick/748b63f90dd00856ef8006845d84f7de to your computer and use it in GitHub Desktop.
Save CoderNamedHendrick/748b63f90dd00856ef8006845d84f7de to your computer and use it in GitHub Desktop.
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