Программистское

Jul 08, 2011 17:04

Задача: есть метод, в глубине которого показывается окошко, которое хочется уметь центрировать двумя способами - относительно заданной точки или заданного контрола.


Вариант "влоб №1 - перегрузка":

public void DoSomewhingAndShowWindow( ..., FrameworkElement originElement )
{
...
Window wnd = new Window();
...
if ( originElement != null )
CenterWindowToElement( wnd, originElement );
}

public void DoSomewhingAndShowWindow( ..., Point originPoint )
{
...
Window wnd = new Window();
...
if ( originPoint != null )
CenterWindowPoint( wnd, originPoint );
}

Вариант "влоб №2 - два параметра":

public void DoSomewhingAndShowWindow( ..., Point originPoint, FrameworkElement originElement )
{
...
Window wnd = new Window();
...
if ( originPoint != null )
CenterWindowToPoint( wnd, originPoint );
else if ( originElement != null )
CenterWindowToElement( wnd, originElement );
}

Но нет, мы же крутые ООПисты, знаем аггрегацию, полиморфизм и много-много других страшных слов, мы сделаем так:

public interface IWindowOrigin
{
void CenterWindow( Window window );
}

public class WindowOriginElement: IWindowOrigin
{
private FrameworkElement element;

public WindowOriginElement( FrameworkElement element)
{
this.element= element;
}

public void CenterWindow( Window window )
{
CenterWindowToElement( window, element );
}
}

public class WindowOriginPoint: IWindowOrigin
{
private Point point;

public WindowOriginPoint( Point point )
{
this.point = point;
}

public void CenterWindow( Window window )
{
CenterWindowToPoint( window, point );
}
}

public void DoSomewhingAndShowWindow( ..., IWindowOrigin windowOrigin )
{
...
Window wnd = new Window();
...
if ( windowOrigin != null )
windowOrigin.CenterWindow( wnd ); // ВОТ ОНО, СЧАСТЬЕ!!!!!!
}

Мне кажется, или я где-то здесь себя нае обманул?
Стразу вспомнился анекдот про эволюцию программистов...

fun, programming, work

Previous post Next post
Up