21 가지 디자인 모델 집합 학습 노트

4692 단어 학습 노트
21 가지 디자인 모델 집합 학습 노트
① 프 록 시 디자인 모델
1. 프 록 시 디자인 모델 의 개념: 대상 에 게 대 리 를 제공 하여 이 대상 에 대한 접근 을 제어 합 니 다.대리 류 와 위탁 류 는 공 통 된 지불 인터페이스 가 있어 서 연루 대상 으로 사용 되 는 모든 곳 에서 대리 류 를 사용 하여 대체 할 수 있다.
스타 와 매니저 와 유사 하 다.스타 는 구체 적 인 의뢰 류 이 고 매니저 는 대리 류 다.대리 류 는 요청 의 예비 처리 (가격 협상) 를 책임 지고 업 무 를 위탁 류 (스타) 에 맡 긴 다음 에 업무 가 완 료 된 후에 대리 류 는 후속 처리 (마무리 대금) 를 완성 한다.
대리 모델 은 포장 모델 과 매우 유사 해 보이 지만 사실은 다르다. 1. 목적: 대리 모델 의 목적 은 결합 성 을 해제 하기 위 한 것 이 고 포장 모델 은 기 존의 대상 의 기능 에서 포장 하 는 것 이다. 예 를 들 어 IO 흐름 중의 각종 포장 유형의 흐름 2. 쓰기, 대리 모델 에서 대리 류 와 위탁 류 는 같은 인 터 페 이 스 를 실현 하고 공장 류 를 통 해 대리 류 를 얻 는 것 이다.한편, 포장 류 는 포장 류 를 통 해 원생 류 를 계승 하여 코드 의 재 활용 율 을 높 인 다.
2. 대 리 는 정적 대리 와 동적 대리 로 나 뉘 는데 정적 대 리 는 모든 의뢰 류 가 하나의 대리 류 를 생 성 해 야 하기 때문에 우 리 는 상세 한 소 개 를 하지 않 습 니 다. 다음은 동적 대 리 를 소개 합 니 다.
동적 대리 의 사상 은 하나의 공장 류 를 사용 하여 서로 다른 위탁 류 의 서로 다른 대리 류 를 동태 적 으로 생 성 하 는 것 이다. 대리 류 실체 가 존재 하지 않 는 다. 예 를 들 어 웹 응용 에서 우리 의 일부 서비스 층 은 사 무 를 열 어야 하고 사 무 를 열 필요 가 없다. 만약 에 업무 층 에서 사물 을 여 는 코드 를 직접 실현 하면 service 층 에서 데이터 베 이 스 를 직접 조작 하 게 된다.코드 의 결합 성 을 향상 시 켰 기 때문에 저 희 는 프 록 시 클래스 를 제공 할 수 있 습 니 다. Servlet 을 통 해 프 록 시 클래스, 프 록 시 클래스 프 록 시 서 비 스 를 호출 할 수 있 습 니 다. 만약 에 Service 층 의 방법 체 에 동적 프 록 시 를 사용 해 야 한 다 는 설명 이 있 으 면.프 록 시 클래스 에서 트 랜 잭 션 을 여 는 분기 에 들 어가 필요 하지 않 으 면 트 랜 잭 션 을 열지 않 아 도 되 는 분기 에 들 어 갑 니 다.(왜 주 해 를 사용 하여 호출 에이전트 의 서로 다른 방법 을 구분 해 야 하 는 이 유 는 방법 중의 일부 변 수 는 외부 에서 접근 할 수 없 기 때문에 우 리 는 주 해 를 통 해 서로 다른 방법의 대 리 를 구분 할 수 밖 에 없다.)
3. 자바 에서 동적 에이전트 클래스 를 전문 적 으로 생 성 하 는 API:
java. lang. reflect. Proxy 간 화 된 동적 에이전트 구현 / / InvocationHandlerImpl 은 InvocationHandler 인 터 페 이 스 를 실현 하고 에이전트 클래스 에서 의뢰 클래스 로 의 할당 전송 InvocationHandler handler = new InvocationHandlerImpl (..) 을 호출 할 수 있 습 니 다.
/ / 프 록 시 를 통 해 동적 프 록 시 클래스 인 스 턴 스 T proxy = (T) 프 록 시. newProxyInstance (classLoader, new Class [] {Interface. class}, handler) 를 직접 만 듭 니 다.classLoader 는 클래스 로 더 를 표시 합 니 다. 일반적으로 의뢰 클래스 의 클래스 로 더 를 말 합 니 다. 이 클래스 를 불 러 오고 새로운 프 록 시 클래스 를 생 성 해 야 하기 때 문 입 니 다.두 번 째 매개 변 수 는 이러한 종류의 모든 인 터 페 이 스 를 나타 낸다. 위탁 류 와 대리 류 는 반드시 같은 인 터 페 이 스 를 실현 해 야 하기 때문이다.세 번 째 매개 변 수 는 실제 적 으로 대리 류 에 대한 조작 이다.
작은 예 를 들 어 방법 에 주석 Tran 이 있다 면 방법 이 시 작 될 때 먼저 사물 을 열 고 방법 이 끝 난 후에 사물 을 제출 합 니 다. 없 으 면 일 만 끝 냅 니 다.
T proxy = (T) Proxy.newProxyInstance(clz.getClassLoader(),clz.getInterfaces(), new InvocationHandler() 
{
                            // 1.     2.       3.          .
                            public Object invoke(Object proxy, Method method,
                                    Object[] args) throws Throwable {
                                // TODO Auto-generated method stub
                                Object result = null;
                                if (method.isAnnotationPresent(Tran.class)) {
                                    //        Tran  ,      

                                    try {
                                        TranManager.startTran();
                                        result = method.invoke(t, args);
                                        TranManager.commitTran();
                                    } catch (InvocationTargetException e) {
                                        TranManager.rollBackTran();
                                        throw e.getTargetException();

                                    } finally {
                                        TranManager.realseTran();   
                                    }

                                } else {
                                    try {
                                        result = method.invoke(t, args);
                                    } catch (InvocationTargetException e) {

                                        throw e.getTargetException();

                                    } finally {
                                        TranManager.realseTran();
                                    }
                                }
                                return result;
                            }

                        });

좋은 웹페이지 즐겨찾기