상세 컨텐츠

본문 제목

ch2.6 옵저버, 2.7 파사드, 2.8 전략 패턴

패캠스프링/part3._스프링입문(part3)

by hippo0207 2022. 7. 28. 16:20

본문

6. 옵저버  패턴

https://github.com/Youngju-Jang/fastcampus-springboot-introduction/tree/master/02.%20%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/SourceCode/design-pattern/src/com/company/design/observer

[IButtonListener.java]
package com.company.design.observer;

public interface IButtonListener {
    void clickEvent(String event);
}

-------------------------
[Button.java]
package com.company.design.observer;

public class Button {
    private String name;
    private IButtonListener buttonListener;

    public Button(String name){
        this.name = name;
    }

    public void addListener(IButtonListener buttonListener){
        this.buttonListener = buttonListener;
    }

    public void click(String message){
        buttonListener.clickEvent((message));
    }
}
----------------------------------
[main.java]
public class Main {
    public static void main(String[] args) {

        Button button = new Button("버튼");
        button.addListener(new IButtonListener() {
            @Override
            public void clickEvent(String event) {
                System.out.println(event);
            }
        });
        button.click("메시지 전달: click1");
        button.click("메시지 전달: click2");
        button.click("메시지 전달: click3");
        button.click("메시지 전달: click4");

    }

https://futurecreator.github.io/2018/06/04/java-observer-pattern/

 

Java 옵저버 패턴 (Observer Pattern)

하나 혹은 여러 클래스가 어떤 클래스의 상태 변화에 따라 동작해야하는 경우를 생각해봅시다. 예를 하나 들어보겠습니다. 제가 요즘 재밌게 보고 있는 페이지 중 ‘책 끝을 접다’ 라는 페이지

futurecreator.github.io

7. 파사드

public class Main {
    public static void main(String[] args) {
        Ftp ftpClient = new Ftp("www.foo.co.kr", 22, "/home/etc");
        ftpClient.connect();
        ftpClient.moveDirectory();

        Writer writer = new Writer("text.tmp");
        writer.fileConnect();
        writer.fileWrite();

        Reader reader = new Reader("text.tmp");
        reader.fileConnect();
        reader.fileRead();

        reader.fileDisconnect();
        writer.fileDisconnect();
        ftpClient.disConnect();
  • facade 있을때 (SftpClient class 생성후)
SftpClient sftpClient = new SftpClient("www.foo.co.kr", 22, "/home/etc", "text.tmp");
sftpClient.connect();

sftpClient.write();
sftpClient.read();
sftpClient.disConnect();

8. 전략 패턴

https://github.com/Youngju-Jang/fastcampus-springboot-introduction/tree/master/02.%20%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/SourceCode/design-pattern/src/com/company/design/strategy

 

GitHub - Youngju-Jang/fastcampus-springboot-introduction: 패스트 캠퍼스 스프링 부트 입문

패스트 캠퍼스 스프링 부트 입문. Contribute to Youngju-Jang/fastcampus-springboot-introduction development by creating an account on GitHub.

github.com

  • 전략 메서드를 가진 객체 (normal strategy, base64 Strategy, Append Strategy)
  • 전략 객체를 사용하는 컨텍스트 (encoder)
  • 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(main)
[main]
    public static void main(String[] args) {

        Encoder encoder = new Encoder();

        //base64
        EncodingStrategy base64 = new Base64Strategy();

        //normal

        EncodingStrategy normal = new NormalStrategy();

        String message = "hello java";
        encoder.setEncodingStrategy(base64);
        String base64Result = encoder.getMessage(message);
        System.out.println(base64Result);

        encoder.setEncodingStrategy(normal);
        String normalResult = encoder.getMessage(message);
        System.out.println(normalResult);
        
         encoder.setEncodingStrategy(new AppendStrategy());
        String appendResult = encoder.getMessage(message);
        System.out.println(appendResult);

 

관련글 더보기

댓글 영역