코딩 공부/디자인패턴

어댑터 패턴, 퍼사드 패턴

공부를 함 2024. 12. 4. 18:36

Adaptor pattern

public class Duck
{
    public void Quack() { }
    public void Fly() { }
}

public class Turkey
{
    public void Gobble() { }
    public void Fly() { }
}

public class TurkeyAdapter : Duck
{
    private Turkey turkey;
    
    public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; }
    
    public void Quack() { turkey.Gobble(); }
    public void Fly() { turkey.Fly(); }
}

 

 

Pacade pattern

public class Amplifier
{
    public void SetStreamingPlayer(StreamingPlayer streamingPlayer) { }
    public void SetSurroundSound() { }
    public void SetVolume(int volume) { }
    public void Off() { }
    public void On() { }
}
public class Tuner
 {
 }

public class StreamingPlayer
{
    public void On() { }
    public void Off() { }
    public void Stop() { }
    public void Play(string movie) { }
}

public class Projector
{
    public void On() { }
    public void Off() { }
    public void WideScreenMode() { }
}

public class TheaterLights
{
    public void Dim(int level) { }
    public void On() { }
}

public class Screen
{
    public void Down() { }
    public void Up() { }
}

public class PopcornPopper
{
    public void On() { }
    public void Off() { }
    public void Pop() { }
}

public class HomeTheaterFacade
{
    private Amplifier amplifier;
    private Tuner tuner;
    private StreamingPlayer streamingPlayer;
    private Projector projector;
    private TheaterLights theaterLights;
    private Screen screen;
    private PopcornPopper popcornPopper;
    
    public HomeTheaterFacade(Amplifier amplifier, Tuner tuner,
        StreamingPlayer streamingPlayer,Projector projector,
        TheaterLights theaterLights, Screen screen,
        PopcornPopper popcornPopper)
    {
        this.amplifier = amplifier;
        this.tuner = tuner;
        this.streamingPlayer = streamingPlayer;
        this.projector = projector;
        this.theaterLights = theaterLights;
        this.screen = screen;
        this.popcornPopper = popcornPopper;
    }

    public void WatchMovie(string movie)
    {
        Console.WriteLine("Get ready to watch a movie...");

        popcornPopper.On();
        popcornPopper.Pop();
        theaterLights.Dim(10);
        screen.Down();
        projector.On();
        projector.WideScreenMode();
        amplifier.On();
        amplifier.SetSurroundSound();
        amplifier.SetStreamingPlayer(streamingPlayer);
        amplifier.SetVolume(5);
        streamingPlayer.On();
        streamingPlayer.Play(movie);
    }
    
    public void EndMovie()
    {
        Console.WriteLine("Shutting movie theater down...");
        amplifier.Off();
        projector.Off();
        theaterLights.On();
        screen.Up();
        popcornPopper.Off();
        streamingPlayer.Stop();
        streamingPlayer.Off();
    }
}

 

'코딩 공부 > 디자인패턴' 카테고리의 다른 글

반복자 패턴, 컴포지트 패턴  (0) 2024.12.05
템플릿 메소드 패턴  (0) 2024.12.05
커맨드 패턴  (0) 2024.12.04
팩토리 패턴  (0) 2024.12.03
데코레이터 패턴  (0) 2024.12.03