Strategy Pattern
From YYpBD's MediaWiki
목차 |
[편집]
개요
알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.
활용하면 독립적으로 알고리즘을 변경할 수 있다.
[편집]
예제
[편집]
Delphi
interface
type
IDoBehavior = interface
procedure Execute;
end;
TWork = class( TInterfacedObject, IDoBehavior )
procedure Execute;
end;
TRun = class( TInterfacedObject, IDoBehavior )
procedure Execute;
end;
TClass = class
protected
FDoBehavior: IDoBehavior;
public
procedure performDo();
procedure setDoBehavior( ADoBehavior: IDoBehavior );
end;
TWorkManClass = class( TClass )
public
constructor Create;
end;
implementation
procedure TWork.Execute;
begin
//
end;
procedure TRun.Execute;
begin
//
end;
procedure TClass.performDo;
begin
FDoBehavior.Execute;
end;
procedure TClass.setDoBehavior(ADoBehavior: IDoBehavior);
begin
FDoBehavior := ADoBehavior;
end;
constructor TWorkManClass.Create;
begin
FDoBehavior := TWork.Create;
end;
var
WorkMan: TClass;
Run: TRun;
begin
WorkMan :+ TWorkManClass.Create;
WorkMan.performDo;
Run := TRun.Create;
WorkMan.setDoBehavior( Run );
WorkMan.performDo;
[편집]
Java
public interface IDoBehavior {
public abstract void Execute();
}
public class TWork implements IDoBehavior {
public void Execute() {
System.out.println( "Work!!" );
}
}
public class TRun implements IDoBehavior {
public void Execute() {
System.out.println( "Run!!" );
}
}
public abstract class TClass {
protected IDoBehavior FDoBehavior;
public void performDo() {
FDoBehavior.Execute();
}
public void setDoBehavior( IDoBehavior ADoBehavior ) {
FDoBehavior = ADoBehavior;
}
}
public class TWorkManClass extends TClass {
public TWorkManClass() {
FDoBehavior = new TWork();
}
}
TClass WorkMan = new TWorkManClass();
WorkMan.performDo();
WorkMan.setDoBehavior( new TRun );
WorkMan.performDo();
