POOPOO: 배변 일기 앱
SMALL
구조패턴 목록
- 어댑터 패턴 (Adapter Pattern)
- 브릿지 패턴 (Bridge Pattern)
- 컴포짓 패턴 (Composite Pattern)
- 데코레이터 패턴 (Decorator Pattern)
- 퍼사드 패턴 (Facade Pattern)
- 플라이웨이트 패턴 (Flyweight Pattern)
- 프록시 패턴 (Proxy Pattern)
인터페이스 구현 시 로직이 많이 변경되어도 사용방법에 있어서 차이가 없도록 코드를 작성해야할 것 같다. 원하는 기능이 있다면 어떻게 원래의 함수에 잘 스며들 수 있을지 고민이 필요할 듯 하다.
장점
- 인터페이스와 구현을 분리할 수 있습니다.
- 확장성을 향상시킵니다.
- 클라이언트로부터 구현 정보를 숨길 수 있습니다.
사용시기
- 기능적 추상화와 구현 사이에 영구적인 바인딩을 원하지 않는 경우
- 기능적 추상화와 구현이 서브클래스를 사용하여 확장되어야 하는 경우
- 구현에서 변경 사항이 클라이언트에 영향을 미치지 않는 곳에서 주로 사용
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/
LIST