Задача: есть метод, в глубине которого показывается окошко, которое хочется уметь центрировать двумя способами - относительно заданной точки или заданного контрола.
Вариант "влоб №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 ); // ВОТ ОНО, СЧАСТЬЕ!!!!!!
}
Мне кажется, или я где-то здесь себя нае обманул?
Стразу вспомнился анекдот про
эволюцию программистов...