JAVA 디자인 모델 의 방문 자 모델 원리 와 용법 에 대한 상세 한 설명
방문 자 모드:
특정한 대상 구조 에서 각 요소 에 작용 하 는 조작 은 각 요소 의 데이터 구 조 를 바 꾸 지 않 는 전제 에서 이러한 요소 에 작용 하 는 새로운 조작 을 증가 시 킬 수 있다.
구조 대상 은 방문 자 모델 에 필수 적 인 조건 이 고 이 구조 대상 은 반드시 자신의 각 대상 을 옮 겨 다 니 는 방법 이 있어 야 한다.
적용: 데이터 구조 가 상대 적 으로 안정 적 이 고 데이터 구조 와 작용 과 그 위의 다른 조작 을 결합 시 켜 조작 을 상대 적 으로 자 유 롭 게 한다.
장점:
1. 단일 직책 원칙 에 부합 되 고 확장 성 이 좋다. 요소 류 는 서로 다른 방문 자 를 받 아들 여 서로 다른 조작 에 대한 확 대 를 실현 할 수 있다.
단점:
1. 새로운 요 소 를 추가 하려 면 조작 을 더욱 복잡 하 게 만 들 수 있다. 2. 일정한 절차 에서 포장 성 원칙 을 파괴 할 수 있다.
방문 자 무기 5 대 캐릭터 대상:
1. Visitor 추상 적 인 방문 자 역할 2. ConcreteVisitor. 구체 적 인 방문 자 역할 3. Element 수용 방문 조작 요소 4. ConcreteElement 구체 적 인 요소 5. Object Structure 구조 대상 역할, 이것 은 방문 자 모델 을 사용 하 는 데 필수 적 인 역할 이다.
/**
* : 。
* ,
* 。
* @description:
* @date 2016-1-15 4:00:29
*/
public interface Visitor {
void visit(Element element);
}
/**
* , Visitor 。
* @description:
* @date 2016-1-15 4:20:46
*/
public class ConcreteVisitor implements Visitor{
@Override
public void visit(Element element) {
Staff e=(Staff) element;
// : : * + * 10
System.out.println(e.getName()+" :"+(e.getDegree()*0.8+e.getWorkAges()*0.5)/10*e.getSalary());//
}
}
/**
* , (Visitor) 。
* @description:
* @date 2016-1-15 3:58:28
*/
public abstract class Element {
public abstract void Acceppt(Visitor visitor);
}
/**
* , (Element) 。
* @description:
* @date 2016-1-15 4:04:24
*/
public class Staff extends Element {
private String name;
private float salary;
private int workAges;
private int degree;
public Staff(String name, float salary, int workAges, int degree) {
super();
this.name = name;
this.salary = salary;
this.workAges = workAges;
this.degree = degree;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getSalary() {
return salary;
}
public void setSalary(float salary) {
this.salary = salary;
}
public int getWorkAges() {
return workAges;
}
public void setWorkAges(int workAges) {
this.workAges = workAges;
}
public int getDegree() {
return degree;
}
public void setDegree(int degree) {
this.degree = degree;
}
@Override
public void Acceppt(Visitor visitor) {
visitor.visit(this);
}
}
/**
* : 。
* :
* ;
* ;
* , ( )。
* @description:
* @date 2016-1-15 4:26:30
*/
public class StaffObject {
private HashMap employees;
public StaffObject() {
employees = new HashMap();
}
public void addEmployee(Staff e) {
if (!employees.containsKey(e.getName())) {
employees.put(e.getName(), e);
}
}
public void removeEmployee(Staff e) {
if (employees.containsKey(e.getName())) {
employees.remove(e);
}
}
public Staff getEmployee(String name) {
return employees.get(name);
}
public void Accept(Visitor v) {
for (Staff e : employees.values()) {
e.Acceppt(v);
}
}
}
테스트 클래스
public class Test {
public static void main(String[] args) {
StaffObject e=new StaffObject();
e.addEmployee(new Staff(" ", 3000f, 2, 1));
e.addEmployee(new Staff(" ", 5000f, 4, 2));
e.addEmployee(new Staff(" ", 8000f, 6, 3));
e.addEmployee(new Staff(" ", 10000f, 9, 4));
e.Accept(new ConcreteVisitor());
}
}
실행 결과:
:1800.0
:540.0
:7700.0
:4320.0
더 많은 자바 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.,,,,,,
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.