Strategy Pattern

From YYpBD's MediaWiki

Jump to: navigation, search

목차

개요

알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.

활용하면 독립적으로 알고리즘을 변경할 수 있다.

예제

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();


맞춤검색