상태 설계 모드 State
왕 씨 는 2 분 후에 코드 를 주 었 습 니 다.
public class Person {
private int age;
public Person(int age) {
this.age = age;
}
public void printSchool() {
if (this.getAge() < 6) {
System.out.println(" 6 !");
} else if (this.getAge() >=6 && this.getAge() < 11) {
System.out.println(" !");
} else if (this.getAge() >= 11 && this.getAge() < 15) {
System.out.println(" !");
} else if(this.getAge() >= 15 && this.getAge() < 19) {
System.out.println(" !");
} else if (this.getAge() >= 19) {
System.out.println(" !");
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
강 소 사 이 즈 는 기뻐 하 며 왕 소 사 이 즈 를 한 대 때 렸 다.
만약 강 소 사이즈 가 또 새로운 수요 가 있다 면, 이 학생 이 몇 학년 에 다 니 는 지 판단 할 것 이다.18 개의 판단 가 지 를 쓸 수 는 없 잖 아.이런 표기 법 은 단일 직책 원칙 을 파괴 한 것 이 분명 하 다. 아래 에서 말 하고 자 하 는 상태 디자인 모델 은 복잡성 을 증가 시 켰 지만 확장 하기 쉽 고 대상 을 대상 으로 하 는 디자인 원칙 에 부합된다.
상태 설계 모델 은 이러한 판단 이 너무 많은 문 제 를 해결 하고 책임 분해 의 목적 을 달성 하기 위해 서 이다.
상태 디자인 모델 은 특정한 상태 관련 행 위 를 한 대상 에 넣 고 상태 와 관련 된 모든 코드 가 특정한 State 에 있 기 때문에 새로운 하위 클래스 를 정의 하면 상태 와 전환 을 쉽게 증가 할 수 있다.
개 조 된 코드:
패키지 구조
-state //
-states
-AgeState.java //
-PrimaryState.java //
-MiddleState.java //
-HighState.java //
-UniversityState.java //
-Person.java
-PersonTest.java
추상 상태
public abstract class AgeState {
public abstract void judge(Person person);
}
초등학교 상태
public class PrimaryState extends AgeState {
@Override
public void judge(Person person) {
if (person.getAge() < 6) {
System.out.println(" 6 , !");
} else if (person.getAge() >= 6 && person.getAge() < 11) {
System.out.println(" !");
} else {
person.setAgeState(new MiddleState());
person.printSchool();
}
}
}
중학교 상태
public class MiddleState extends AgeState {
@Override
public void judge(Person person) {
if (person.getAge() >= 11 && person.getAge() < 15) {
System.out.println(" !");
} else {
person.setAgeState(new HighState());
person.printSchool();
}
}
}
고등학교 상태
public class HighState extends AgeState {
@Override
public void judge(Person person) {
if (person.getAge() >= 15 && person.getAge() < 19) {
System.out.println(" !");
} else {
person.setAgeState(new UniversityState());
person.printSchool();
}
}
}
대학 상태
public class UniversityState extends AgeState {
@Override
public void judge(Person person) {
if (person.getAge() >= 19) {
System.out.println(" !");
}
}
}
Person 류
public class Person {
private int age;
private AgeState ageState;
public void printSchool() {
this.ageState.judge(this);
}
public Person(int age) {
this.age = age;
this.ageState = new PrimaryState();
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public AgeState getAgeState() {
return ageState;
}
public void setAgeState(AgeState ageState) {
this.ageState = ageState;
}
}
테스트:
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person(12);
p1.printSchool();
Person p2 = new Person(18);
p2.printSchool();
Person p3 = new Person(3);
p3.printSchool();
Person p4 = new Person(23);
p4.printSchool();
}
}
테스트 출력:
!
!
6 , !
!
이렇게 고치 면 나중에 대학원, 박사, 박사후 에 도 쉽게 확장 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.