[꼭대기] 자바 디자인 모델 의 decoration 모드

저 는 최근 에 을 공부 하고 있 습 니 다. 유명한 박문 인 을 읽 었 기 때문에 박문 을 써 서 디자인 모델 을 배 운 소감 과 깨 달 음 을 정리 하고 싶 습 니 다. 좋 지 않 은 점 은 많이 양해 해 주 십시오. 만약 에 그 중의 잘못 을 지적 해 주신 다 면 저 는 감사 하 겠 습 니 다.
  디자인 모델 의 본원 은 자바 개발 에서 대상 을 대상 으로 하 는 여러 가지 원칙 이다. 예 를 들 어 후진 원칙 (DIP), 개폐 원칙 (OCP), 인터페이스 프로 그래 밍 (programming to interface) 등에 의존 하 는 것 이다. 그러나 근본 적 인 목적 은 정보 숨 김 과 모듈 화 이다. 그리고 최종 적 인 추 구 는 프로그램의 효용, 견고, 심미 이다. 이것 은 디자인 모델 의 남상 이다.
        디자인 모델 을 사용 하면 어떤 장점 이 있 습 니까? 다른 프로그래머 와 의사 소통 을 할 때 디자인 모델 의 공유 문 구 를 사용 합 니 다. 사실은 '다른 사람과' 행 어 '를 공유 하 는 것 이 아 닙 니 다. 이 유 는 다음 과 같 습 니 다.
         1. 공유 모델 의 단어 인 '위력 이 강하 다'. 모델 이름 을 사용 하여 다른 개발 자 나 개발 팀 과 교 류 를 할 때 모델 이름 이 아니 라 전체 모델 뒤에 상징 되 는 품질, 특성, 제약 을 교류 합 니 다.
        2. 모델 은 더 적은 단 어 를 사용 하여 더욱 충분 한 교 류 를 할 수 있 습 니 다. 이것 은 '소 언' 프로그래머 에 게 큰 행운 입 니 다.
        3. 디자인 모델 은 '디자인 라인' 에 더욱 집중 할 수 있 습 니 다. 그러면 너무 일찍 디자인 바 텀 디 테 일 에 대한 사 고 를 하지 않 습 니 다. (세 가지 내용 은 에서 발췌)
       《 헤드 퍼스트 디자인 모델 》.스타 벅 스 카페 의 자동 판매 시스템 을 예 로 들 어 상황 설 계 를 한다. 고객 이 커피 를 구 매 할 때 그 요구 에 따라 커피 에 다양한 양념 을 넣 을 수 있다. 예 를 들 어 모 카, 두유 또는 우 유 를 덮 는 것 이다. 시스템 은 넣 은 양념 에 따라 비용 을 받는다. 그래서 서로 다른 커피 와 양념 간 의 자유로운 조합 은 대량의 대상 을 만 들 었 다. 이것 은유지 보 수 는 매우 큰 번 거 로 움 을 가 져 온다.
       이 를 통 해 우 리 는 장식 자 모델, 즉 동태 적 으로 책임 을 대상 에 부가 하고 기능 을 확장 하려 면 장식 자 는 계승 보다 더욱 탄력 적 인 대체 방안 을 제공 합 니 다. 그 중의 세부 사항 은:
      1. 장식 자 와 피 장식 대상 은 같은 초 유형 을 가지 고 있다.
      2. 하나 이상 의 장식 자 를 이용 하여 대상 을 포장 할 수 있 습 니 다.
      3. 원시 대상 (포장) 이 필요 한 경우 장식 자 대상 으로 대체 할 수 있 습 니 다.
      4. 장식 자 는 의뢰 한 피 장식 자의 행위 전이 나 그 후에 자신의 행 위 를 더 해 특정한 목적 에 도달 할 수 있다.
      5. 장식 자 는 장식 자 를 포장 할 수 있 습 니 다. 이때 포 장 된 장식 자 는 반드시 피 장식 자 를 포 장 했 을 것 입 니 다.
     전체적으로 보면 장식 자 는 비슷 한 줄거리 에서 간단 한 계승 을 사용 할 때 발생 하 는 대량의 대상 의 악몽 을 지 키 는 것 을 피한다.
     다음은 하나의 예 이다.
      이것 은 장식 자의 초유 류 이다.
public abstract class        extends      {
	public abstract String     ();
}
     이것 은 커피 의 종류 이다.
public abstract class       {
	String cfName = "not Name";
	
	public String     (){
		return cfName;
	}
	
	public abstract double   ();
}

      다음은 두 개의 구체 적 인 장식 자 입 니 다.
public class   A extends       {
	
	      cf;
	
	public   A(      cf){
		this.cf = cf;
	}

	@Override
	public String     () {
		return cf.    () + "     A";
	}

	@Override
	public double   () {
		return cf.  () + 123.01;
	}

}
public class   B extends       {
	
	      cf;
	
	public   B(      cf){
		this.cf = cf;
	}

	@Override
	public String     () {
		return cf.    () + "     B";
	}

	@Override
	public double   () {
		return cf.  () + 165.01;
	}

}

       이것 은 커피 종류 입 니 다.
public class     A extends      {
	
	public     A(){
		cfName = "    A";
	}

	@Override
	public double   () {
		return 10.11;
	}

}

       다음은 demo:
public class    {
	public static void main(String[] args) {
		      c = new   A(new     A());
		
		System.out.println(c.    ());
		System.out.println(c.  ());
	}
}

       내용 이 그렇게 많 고 책 에서 얻 은 것 이 많 습 니 다. 그러나 저 는 예 를 들 어 커피 의 초 류 는 추상 류 가 아니 라 new 가 해당 대상 을 낼 때 다른 모델 인 공장 모델 로 인터페이스 프로 그래 밍 원칙 을 실현 할 수 있다 고 생각 합 니 다.
     
     
                          

좋은 웹페이지 즐겨찾기