Notice
Recent Posts
Recent Comments
Link
투케이2K
55. (TWOK/ALGORITHM) [Android] 패턴 - 팩토리 패턴 (Factory Pattern) 구현 실시 본문
투케이2K 알고리즘
55. (TWOK/ALGORITHM) [Android] 패턴 - 팩토리 패턴 (Factory Pattern) 구현 실시
투케이2K 2022. 8. 24. 15:00[환경 설정 및 설명]
언 어 : Android (Java)
설 명 : 패턴 - 팩토리 패턴 (Factory Pattern) 구현 실시
[클래스 구조]
[요약 설명]
/**
* TODO [클래스 설명]
* // -----------------------------------------
* 1. 팩토리 패턴 정의 클래스
* // -----------------------------------------
* 2. 팩토리 패턴 :
*
* 다수의 자식 클래스를 가진 슈퍼 클래스가 있을 경우 매개 변수 값에 따라서 해당 자식 클래스의 인스턴스를 반환해줍니다
*
* 팩토리 패턴 구현에 필요한 슈퍼 클래스는 인터페이스, 추상 클래스, 일반 클래스 모두 가능합니다
*
* 팩토리 패턴은 클라이언트와 구현 객체들 사이에 추상화를 제공합니다
* // -----------------------------------------
* 3. 팩토리 패턴 사용 이유 :
*
* - 일반 클래스에서 서브 클래스의 인스턴스화 (객체 생성) 를 제거해 서로 간의 종속성을 낮추며 확장을 쉽게할 수 있습니다
* - 서브 클래스에서 코드 수정이 발생해도 일반 클래스에서는 알 수 없으므로 코드 수정을 할 필요가 없습니다 (분업 용이)
* // -----------------------------------------
* */
[Abstract_Class : 소스 코드]
package com.example.testapp.FactoryPattern;
import org.json.JSONObject;
public abstract class Abstract_Class {
// [추상 메소드 헤더 정의 실시]
public abstract String getName();
public abstract int getAge();
// [toString 메소드 재정의]
@Override
public String toString() {
return "name = " + getName() + " / " + "age = " + getAge();
}
}
[Factory_Class : 소스 코드]
package com.example.testapp.FactoryPattern;
public class Factory_Class {
/**
* TODO [클래스 설명]
* // -----------------------------------------
* 1. 팩토리 패턴 정의 클래스
* // -----------------------------------------
* 2. 팩토리 패턴 :
*
* 다수의 자식 클래스를 가진 슈퍼 클래스가 있을 경우 매개 변수 값에 따라서 해당 자식 클래스의 인스턴스를 반환해줍니다
*
* 팩토리 패턴 구현에 필요한 슈퍼 클래스는 인터페이스, 추상 클래스, 일반 클래스 모두 가능합니다
*
* 팩토리 패턴은 클라이언트와 구현 객체들 사이에 추상화를 제공합니다
* // -----------------------------------------
* 3. 팩토리 패턴 사용 이유 :
*
* - 일반 클래스에서 서브 클래스의 인스턴스화 (객체 생성) 를 제거해 서로 간의 종속성을 낮추며 확장을 쉽게할 수 있습니다
* - 서브 클래스에서 코드 수정이 발생해도 일반 클래스에서는 알 수 없으므로 코드 수정을 할 필요가 없습니다 (분업 용이)
* // -----------------------------------------
* */
/**
* TODO [팩토리 패턴 사용 방법]
* // -----------------------------------------
* try {
* Abstract_Class sub_1 = Factory_Class.getInfo(1, "투케이", 29);
* Abstract_Class sub_2 = Factory_Class.getInfo(2, "TWOK", 29);
*
* Log.i("---","---");
* Log.w("//===========//","================================================");
* Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> onCreate() :: 팩토리 데이터 확인]");
* Log.i("","\n"+"[sub_1 :: "+String.valueOf(sub_1.toString())+"]");
* Log.i("","\n"+"[sub_2 :: "+String.valueOf(sub_2.toString())+"]");
* Log.w("//===========//","================================================");
* Log.i("---","---");
* }
* catch (Exception e){
* e.printStackTrace();
* }
* // -----------------------------------------
* */
// TODO [서브클래스 인스턴스를 리턴하는 메소드 작성]
public static Abstract_Class getInfo(int type, String name, int age){
// [분기 처리 실시]
if (type == 1){
return new Sub_1_Class(name, age);
}
else if (type == 2) {
return new Sub_2_Class(name, age);
}
else {
return null;
}
}
} // TODO [클래스 종료]
[Sub_1_Class : 소스 코드]
package com.example.testapp.FactoryPattern;
public class Sub_1_Class extends Abstract_Class { // [추상 클래스 상속 받음]
// [전역 변수 선언]
private String name;
private int age;
// [클래스 생성자 초기화]
public Sub_1_Class (String name, int age){
this.name = name;
this.age = age;
}
// [메소드 재정의]
@Override
public String getName() {
return this.name;
}
// [메소드 재정의]
@Override
public int getAge() {
return this.age;
}
}
[Sub_2_Class : 소스 코드]
package com.example.testapp.FactoryPattern;
public class Sub_2_Class extends Abstract_Class { // [추상 클래스 상속 받음]
// [전역 변수 선언]
private String name;
private int age;
// [클래스 생성자 초기화]
public Sub_2_Class (String name, int age){
this.name = name;
this.age = age;
}
// [메소드 재정의]
@Override
public String getName() {
return this.name;
}
// [메소드 재정의]
@Override
public int getAge() {
return this.age;
}
}
[결과 출력]
반응형
'투케이2K 알고리즘' 카테고리의 다른 글
Comments