1. 내가설계한 template method pattern 예제

제목 : 프로그래밍

template method pattern이란 알고리즘의 뼈대를 만들어 전체적인 레이아웃을 통일 시키지만 상속받은 클래스로 하여금 어느정도 유연성을 주도록하는 패턴이다.

추상 메소드와 훅 메소드를 적절히 사용해서 전체적인 알고리즘의 뼈대를 유지하되 유연하게 기능을 변경 할 수 있도록 하고자 할 때 사용한다.

이번에 내가 설계한 template method pattern예제는 프로그래밍 시스템이다. c언어와 자바언어를 작성할 때 각각 맞는 툴은 다르지만 코드를 작성하고 컴파일하는 전체적인 구조는 같기 때문에 선정하였다.

 

 

2. 코드 설명

1)client 클래스

client 클래스에서 시스템이 시작한다. programming클래스를 상속받은 cjava programming클래스를 이용하여 각각의 언어에 맞는 프로그래밍을 한다.

public class client {

public static void main(String[]args) {

programming cp = new CProgramming();

programming jp = new JavaProgramming();

cp.working();

System.out.println();

jp.working();

}

}

 

 

2)programming 추상 클래스

programming 추상 클래스는 시스템에서 전체적인 골격을 잡아주는 역할을한다. 코드작성과 컴파일부분은 같기 때문에 하나로 작성하였고 개발툴은 다르기 때문에 추상 메소드로 만들었다.

abstract public class programming {

public void working() {

intro();

tool();

System.out.println("코드를 작성한다.");

System.out.println("코드를 컴파일 한다.");

System.out.println("A+를 받는다.");

}

public abstract void tool();

public abstract void intro();

}

 

 

3)CProgramming 클래스

CProgramming 클래스는 programming클래스를 상속받아 c언어 개발에 맞는 visualstudio tool을 사용한다.

public class CProgramming extends programming{

public void intro() {

System.out.println("C프로그래밍 입니다.");

}

public void tool() {

System.out.println("Visual Studio를 실행한다.");

}

 

 

4)JavaProgramming

JavaProgramming 클래스는 programming클래스를 상속받아 c언어 개발에 맞는 eclipse tool을 사용한다.

public class JavaProgramming extends programming{

public void intro() {

System.out.println("java프로그래밍 입니다.");

}

public void tool() {

System.out.println("eclipse를 실행한다.");

}

 

 

3. 클래스다이어그램

 

 

4. 코드 실행결과

 

 

'학교공부' 카테고리의 다른 글

텔넷  (0) 2018.12.03
이해하기쉬운 command pattern 예제  (0) 2018.11.25
이해하기쉬운 bridge pattern 예제  (0) 2018.11.23
쉽게설명한 전자상거래 유형  (0) 2018.11.22
이해하기쉬운 abstract factory pattern 예제  (2) 2018.11.22

1. 내가 설계한 Command pattern 예제

제목 : 돌려 돌려 선풍기

Command pattern이란 classobject들이 상호작용하는 방법과 책임을 분산하는 방법을 정의한 것이다. 여러 가지 행위 관련 pattern을 사용하여 독립적으로 일을 처리하고자 할 때 사용한다.

이번 과제에서 내가 설계한 Command patern예제는 선풍기이다. 선풍기는 바람을 일으키는 기능 이외에 회전이라는 별도의 기능이 따로 있다. 그렇기 때문에 이번 과제인 Command pattern예제로 선정하였다. 선풍기 프로그램의 클래스는 총 7가지이다. 하나하나 살펴보겠다.

 

 

1) client클래스

client클래스는 프로그램이 처음 시작하는 클래스이다. client클래스에서 바람을 일으키는 button1과 회전을 시키는 button2를 생성하여 이용자는 pressed()함수를 이용하여 해당 버튼의 기능을 수행한다.

public class client {

public static void main(String[] args){

Wind wind = new Wind();

Command WindCommand = new WindCommand(wind);

Button button1 = new Button(WindCommand);

 

Rotation rotation = new Rotation();

Command RotationCommand = new RotationCommand(rotation);

Button button2 = new Button(RotationCommand);

 

button1.pressed();

button2.pressed();

button2.pressed();

button1.pressed();

button1.pressed();

}

}



 

2) Button클래스

Button클래스는 setCommand함수를 이용하여 어떤 버튼을 생성할 것인가에 대해 Command클래스를 설정 할 수 있고 pressed()함수를 이용하여 기능을 실행시킨다.

public class Button {

private Command theCommand;

public Button(Command theCommand){

setCommand(theCommand);

}

public void setCommand(Command newCommand){

this.theCommand = newCommand;

}

public void pressed(){

theCommand.execute();

}

}

 

 

 

3) Command클래스

각 기능의 Command를 수행시키는 매개체 역할을 하는 클래스이다.

public interface Command {

public abstract void execute();

}

 

 

 

4) WindCommand클래스

Command클래스를 상속받고 Wind클래스를 이용하여 execute()함수를 통해 바람을 일이키는 기능을 수행시키는 클래스이다.

public class WindCommand implements Command{

private Wind wind;

public WindCommand(Wind wind){

this.wind = wind;

}

public void execute(){

wind.start();

}

}

 

 

 

5) RotationCommand클래스

Command클래스를 상속받고 Rotation클래스를 이용하여 execute()함수를 통해 회전기능을 수행시키는 클래스이다.

public class RotationCommand implements Command{

private Rotation rotation;

public RotationCommand(Rotation rotation){

this.rotation = rotation;

}

public void execute(){

rotation.start();

}

}

 

 

 

6) Wind클래스

start()함수를 이용하여 power변수에 따라서 해당하는 기능을 수행한다.

power=0일 때, power1증가시키고 바람세기를 약으로 선풍기를 가동시킨다.

power=1일 때, power1증가시키고 바람세기를 강으로 선풍기를 가동시킨다.

power=2일 때, power0으로 초기화하고 선풍기를 중지시킨다.

public class Wind {

private int power = 0;

public void start(){

if(power == 0){

power++;

System.out.println("선풍기 가동 (바람세기:)");

}else if(power == 1){

power++;

System.out.println("선풍기 가동 (바람세기:)");

}else{

power =0;

System.out.println("선풍기 가동 중지");

}

}

}

 

 

 

7) Rotation클래스

start()함수를 이용하여 run변수에 따라서 해당하는 기능을 수행한다.

run=false일 때, runtrue로 바꾸고 선풍기를 회전시킨다.

run=true일 때, runfalse로 바꾸고 선풍기 회전을 중지시킨다.

public class Rotation {

private boolean run=false;

public void start(){

if(run==false){

run = true;

System.out.println("선풍기를 회전시킵니다.");

}else{

System.out.println("선풍기 회전을 중지시킵니다.");

run = false;

}

}

}

 


2. 선풍기 클래스다이어그램



 

3. 실행화면

button1.pressed(); #button1=바람

button2.pressed(); #button2=회전

button2.pressed();

button1.pressed();

button1.pressed();

 

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