1. 내가설계한 bridge pattern 예제

제목 : 카드결제 시스템

bridge pattern이란 새로 추가한 객체의 interface가 기존 시스템에 맞지 않을 경우 새로운 interface를 정의하지 않고 단지 조상 class만을 상속받아 classabstract method를 구현하면서 새로운객체가 가진 method와 데이터를 사용하는 것이다.

이번 과제에서 bridge patter의 예제로 카드 결제시스템을 선택하였다. 한 계열사의 인터넷 쇼핑몰에서 해당 계열사의 카드뿐만아니라 새로운 interface인 다른 계열사의 카드를 사용하기 때문에 brigde pattern을 사용해야겠다고 생각했다.

 

2. 코드 설명

1)client 클래스

client 클래스에서 프로그램이 시작된다. client가 상품을 결정했다고 가정하고 바로 knushop 클래스 객체를 생성하여 card 선택하고 계산한다.

public class client {

public static void main(String[]args) {

System.out.println("상품을 선택하였습니다.");

knushop kns = new knushop();

kns.discount_product();

}

}

 

2)knushop 클래스

knushop클래스는 생성자를 통해 어떤카드를 선택할지 선택하고 discount_product함수를 통해서 선택된 카드를 통해서 상품을 계산한다.

import java.util.Scanner;

 

public class knushop {

private String card;

public knushop() {

System.out.println("어떤카드로 계산하시겠습니까?");

System.out.println("1.knucard, 2.dccard");

Scanner sc = new Scanner(System.in);

String selectCard = sc.nextLine();

if(selectCard.equals("knucard")||selectCard.equals("1")) {

set_card("knucard");

}

else if(selectCard.equals("dccard")||selectCard.equals("2")) {

set_card("dccard");

}

else {

set_card("error");

}

}

public void discount_product() {

discount dc = new discount();

card cd = dc.return_card_object(this);

cd.discount();

}

public String get_card() {

return card;

}

public void set_card(String selectCard) {

card = selectCard;

}

}

 

3)discount 클래스

discount클래스는 선택된 카드의 이름에 따라 card객체를 결정하는 중간다리 역할을 한다.

public class discount {

public card return_card_object(knushop knushop) {

knushop kns = knushop;

if(kns.get_card().equals("knucard")) {

return new knucard();

}

else if(kns.get_card().equals("dccard")) {

return new dccardAdapter();

}

else {

return new error();

}

}

}

 

4)card 추상클래스

card 추상클래스는 discount함수를 통해서 knushop의 물건을 계산한다.

abstract class card {

public abstract void discount();

}

 

5)knucard 클래스

knucard클래스는 card클래스를 상속받아서 knu인터넷 쇼핑몰에서 knucard를 사용할 수 있게 해준다.

class knucard extends card {

public knucard() {

System.out.println("knucard가 선택되었습니다.");

}

public void discount() {

System.out.println("knucard로 계산하였습니다.");

}

}

 

6)dccardAdapter 클래스

dccardAdaptercard를 상속받고 knu인터넷 쇼핑몰의 인터페이스에 맞지않은 dccard를 사용할 수 있게 해주는 역할을 한다.

class dccardAdapter extends card{

private dccard dccard;

public dccardAdapter() {

dccard = new dccard();

}

public void discount() {

dccard.discount();

}

}

 

7)dccard 클래스

dccard클래스는 dccardAdapter를 통해서 dccardknu 인터넷 쇼핑몰에서 사용가능하게 된다.

class dccard {

public dccard() {

System.out.println("dc카드가 선택되었습니다.");

}

public void discount() {

System.out.println("dc카드로 계산하였습니다.");

}

}

 

8)error클래스

사용할 수 없는 카드가 선택될 때 오류메세지가 출력된다.

class error extends card{

public void discount() {

System.out.println("존재하지 않는 카드입니다.");

}

}

 

3. 클래스다이어그램


 

 

4. 코드 실행결과


 

+ Recent posts