[자바 디자인 패턴] 구조패턴 - 브릿지 패턴

2021. 3. 17. 17:29 JAVA/Design Patterns

구조패턴 목록

 

인터페이스 구현 시 로직이 많이 변경되어도 사용방법에 있어서 차이가 없도록 코드를 작성해야할 것 같다. 원하는 기능이 있다면 어떻게 원래의 함수에 잘 스며들 수 있을지 고민이 필요할 듯 하다.

 

장점

- 인터페이스와 구현을 분리할 수 있습니다.

- 확장성을 향상시킵니다.

- 클라이언트로부터 구현 정보를 숨길 수 있습니다.

 

사용시기

- 기능적 추상화와 구현 사이에 영구적인 바인딩을 원하지 않는 경우

- 기능적 추상화와 구현이 서브클래스를 사용하여 확장되어야 하는 경우

- 구현에서 변경 사항이 클라이언트에 영향을 미치지 않는 곳에서 주로 사용

 

UML

 Model Class : Question, JavaQuestions

public interface Question {  
    public void nextQuestion();  
    public void previousQuestion();  
    public void newQuestion(String q);  
    public void deleteQuestion(String q);  
    public void displayQuestion();  
    public void displayAllQuestions();  
} 
public class JavaQuestions implements Question {  
    private List <String> questions = new ArrayList<String>();  
    private int current = 0;  
    
    public JavaQuestions(){  
        questions.add("What is class? ");  
        questions.add("What is interface? ");  
        questions.add("What is abstraction? ");  
        questions.add("How multiple polymorphism is achieved in java? ");  
        questions.add("How many types of exception  handling are there in java? ");  
        questions.add("Define the keyword final for  variable, method, and class in java? ");  
        questions.add("What is abstract class? ");  
        questions.add("What is multi-threading? ");  
    }  
    
    public void nextQuestion() {  
        if( current <= questions.size()-1 )  
        current++;  
        System.out.print(current);  
    }  
  
    public void previousQuestion() {  
        if( current > 0 )  
        current--;  
    }  
  
    public void newQuestion(String quest) {  
        questions.add(quest);  
    }  
  
    public void deleteQuestion(String quest) {  
        questions.remove(quest);  
    }  
  
    public void displayQuestion() {  
        System.out.println( questions.get(current) );  
    }
    
    public void displayAllQuestions() {  
        for (String quest : questions) {  
            System.out.println(quest);  
        }  
    }  
}

 

Bridge Class : QuestionManager, QuestionFormat

public class QuestionManager  {  
    protected Question q;  
    public String catalog;  
    
    public QuestionManager(String catalog) {  
        this.catalog=catalog;  
    }  
    
    public void next() {  
        q.nextQuestion();  
    }  
    
    public void previous() {  
        q.previousQuestion();  
    }  
    
    public void newOne(String quest) {  
        q.newQuestion(quest);  
    }  
    
    public void delete(String quest) {  
        q.deleteQuestion(quest);  
    }  
    
    public void display() {  
        q.displayQuestion();  
    }  
    
    public void displayAll() {  
        System.out.println("Question Paper: " + catalog);  
        q.displayAllQuestions();  
    }  
}
public class QuestionFormat extends QuestionManager {
    public QuestionFormat(String catalog){  
        super(catalog);  
    }  
    
    public void displayAll() {  
        System.out.println("\n---------------------------------------------------------");  
        super.displayAll();  
        System.out.println("-----------------------------------------------------------");  
    }  
}

 

Operation Class : BridgePatternDemo

public class BridgePatternDemo {  
    public static void main(String[] args) {  
        QuestionFormat questions = new QuestionFormat("Java Programming Language");  
    
        questions.q = new JavaQuestions();  
        questions.delete("what is class?");  
        questions.display();  
        questions.newOne("What is inheritance? ");  
        questions.newOne("How many types of inheritance are there in java?");  
        questions.displayAll();
    }  
}

 

출처 : https://www.javatpoint.com/

know-one-by-one.tistory.com/40