디자인 모드 (2) 프 록 시 모드 정적 에이전트

3733 단어
  • 수요: 하나의 차 종 류 를 설계 하고 방법 이 있 으 며 run 은 현재 하나의 방안 을 설계 하여 그의 앞 뒤 운행 시간 을 계산 해 야 한다.
  • 일반적으로 이런 종 류 는 이렇게 쓸 수 있다
  • public class car{
        long start,end;
        private void before(){
            start=System.currentTimeMillis();
            System.out.println("     :"+start);
        }
        private void after(){
            end=System.currentTimeMillis();
            System.out.println("     :"+end+".
    :"+(end-start)+" "); } pubic void run(){ try { after(); System.out.println(" ~~~"); Thread.sleep((int)(Math.random()*100)); before(); } catch (InterruptedException e) { e.printStackTrace(); } } }
  • 결 과 는 다음 과 같다.
  • 운전 전 시간: 15031271334747 운전 중 ~ ~ 운전 후 시간: 15031271335124. 총 소모 시간: 377 밀리초
    Process finished with exit code 0
    하지만 확장 할 수 있 도록 Icar. 자바 (자동차 인터페이스) 를 사용 합 니 다.
    package cn.niriqiang.demo;
    
    /**
     * Created by fengyuwusong on 2017/8/19 14:53.
     */
    public interface ICar {
        public void run();
    }
    

    CarImpl 자동차 실현 류
    package cn.niriqiang.demo;
    
    /**
     * Created by fengyuwusong on 2017/8/19 14:54.
     */
    public class CarImpl implements ICar{
        @Override
        public void run() {
            try {
                System.out.println("    ~~~");
                Thread.sleep((int)(Math.random()*1000));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
    

    CarProxy 자동차 타이머 기능 에이전트
    package cn.niriqiang.demo;
    
    /**
     * Created by fengyuwusong on 2017/8/19 14:58.
     */
    public class Carproxy implements ICar{
        private ICar car;
        long start,end;
        public Carproxy(ICar car) {
            this.car = car;
        }
    
        @Override
        public void run() {
            before();
            car.run();
            after();
    
        }
    
        private void before(){
            start=System.currentTimeMillis();
            System.out.println("     :"+start);
    
        }
    
        private void after(){
            end=System.currentTimeMillis();
            System.out.println("     :"+end+".
    :"+(end-start)+" "); } }

    main 테스트 방법
    package cn.niriqiang.demo;
    
    /**
     * Created by fengyuwusong on 2017/8/19 14:55.
     */
    public class main {
    
        public static void main(String[] args) {
            ICar car=new CarImpl();
            Carproxy carproxy=new Carproxy(car);
            carproxy.run();
        }
    }
    
    

    상기 표기 법 은 바로 대리 모델 의 정적 대리 이다. 이러한 장점 은 수요 변화 에 가입 하 는 것 이다. 자동차 운행 전후 에 새로운 기능 을 추가 해 야 할 때 우 리 는 기능 에 따라 자동차 에 새로운 대 리 를 추가 할 수 있다. 예 를 들 어:
    CarLogProxy. java 는 자동차 에 로그 기능 을 추가 합 니 다.
    package cn.niriqiang.demo;
    
    /**
     * Created by fengyuwusong on 2017/8/19 15:27.
     */
    public class CarLogProxy implements ICar{
        ICar car;
    
        public CarLogProxy(ICar car) {
            this.car = car;
        }
    
    
        private void before(){
            System.out.println("     :xxxxx...");
        }
    
        private void after(){
            System.out.println("     :xxxxx...");
        }
    
        @Override
        public void run() {
            before();
            car.run();
            after();
        }
    }
    
    

    우 리 는 man 방법 을 조금 만 바 꾸 면 새로운 기능 을 얻 을 수 있다.
    package cn.niriqiang.demo;
    
    /**
     * Created by fengyuwusong on 2017/8/19 14:55.
     */
    public class main {
    
        public static void main(String[] args) {
            ICar car=new CarImpl();
            Carproxy carproxy=new Carproxy(car);
            CarLogProxy carLogProxy=new CarLogProxy(carproxy);
            carLogProxy.run();
        }
    }
    
    

    결실
    운전 전 일지: xxxx... 운전 전 시간: 1503127842768 운전 중 ~ ~ 운전 후 시간: 1503127842835. 총 소모 시간: 67 밀리초 운전 후 일지: xxxx...

    좋은 웹페이지 즐겨찾기