사용자 정의 주석 과 디자인 모드

5260 단어
사용자 정의 설명
package shmily.lyp;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @Target      
 * ElementType.TYPE        
 * ElementType.METHOD        
 * ElementType.FIELD        
 * @Retention      
 * RetentionPolicy.RUNTIME        
 */
@Target(value = {ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@interface TestAnnotaion{
    int beanId() default 0; //      
    String name() default "";
    String[] arr();
}

@TestAnnotaion(beanId = 1, name = "shmilylyp", arr = {"1", "2"})
public class Test02 {
    @TestAnnotaion(arr = {"3", "4"})
    private String name;

//    @TestAnnotaion()
    private void test002(){}
}


2. 디자인 모델 1. 역할: 중복 이용, 코드 확장, 읽 기 향상, 코드 감소 2. 디자인 모델 의 6 대 원칙 ① 개폐 원칙: 확장 성에 전념,② 리 씨 교체 원칙 을 수정 하 였 습 니 다. 대상 을 대상 으로 ③ 반전 원칙 에 의존 합 니 다. 인터페이스 프로 그래 밍 ④ 인터페이스 격 리 원칙: 인터페이스 분리 ⑤ 디 미트 법칙: 정의 류 는 가능 한 한 다른 유형 과 관계 가 발생 합 니 다 ⑥ 합성 재 활용 원칙: 코드 무 거 운 부담 사용 3, 단일 모델: jvm 에서 하나의 인 스 턴 스 만 있 도록 합 니 다 I: 게으름뱅이 식 - 스 레 드 가 안전 하지 않 습 니 다.필요 할 때 만 들 기
package shmily.lyp;

//   jvm        
class Singleton {
    private static Singleton singleton;

    //   
    private Singleton() {
    }

    public static Singleton getSingleton() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

public class Test03 {
    public static void main(String[] args) {
        Singleton s1 = Singleton.getSingleton();
        Singleton s2 = Singleton.getSingleton();
        System.out.println(s1 == s2);
    }
}


II: 배 고 픈 한식 - 스 레 드 안전, jvm 프레임 아 때 정례 화
package shmily.lyp;

//   jvm        
class Singleton1 {
    private static Singleton1 singleton = new Singleton1();

    //   
    private Singleton1() {
    }

    public static Singleton1 getSingleton1() {
        return singleton;
    }
}

public class Test04 {
    public static void main(String[] args) {
        Singleton1 s1 = Singleton1.getSingleton1();
        Singleton1 s2 = Singleton1.getSingleton1();
        System.out.println(s1 == s2);
    }
}

4. 공장 모델
package shmily.lyp;

interface Car {
    void run();
}

class AoDi implements Car {
    @Override
    public void run() {
        System.out.println("    ");
    }
}

class BenChi implements Car {
    @Override
    public void run() {
        System.out.println("    ");
    }
}

class CarFactory {
    public static Car createCar(String name) {
        Car car = null;
        switch (name) {
            case "BenChi":
                car = new BenChi();
                break;
            case "AoDi":
                car = new AoDi();
                break;
            default:
                break;
        }
        return car;
    }
}

public class Test05 {
    public static void main(String[] args) {
        Car aoDi = CarFactory.createCar("AoDi");
        aoDi.run();
    }
}

5. 프 록 시 모드 두 가지 모드: 정적 에이전트 (프 록 시 클래스 생 성), 동적 에이전트 (프 록 시 클래스 생 성 필요 없 음, JDK 동적 에이전트 와 CGLIB 에이전트 로 나 뉜 다) I, 정적 에이전트
package shmily.lyp;

interface Hose{
    void buyHouse();
}

class Shmilylyp implements Hose{
    @Override
    public void buyHouse() {
        System.out.println("  shmilylyp,         ");
    }
}

class Proxy implements Hose{

    //    
    private Shmilylyp shmilylyp;

    public Proxy(Shmilylyp shmilylyp) {
        this.shmilylyp = shmilylyp;
    }

    @Override
    public void buyHouse() {
        System.out.println("    ,        ");
        shmilylyp.buyHouse();
        System.out.println("       ");
    }
}

public class Test06 {
    public static void main(String[] args) {
        Hose hose = new Proxy(new Shmilylyp());
        hose.buyHouse();
    }
}

Ⅱ, 동적 에이전트
package shmily.lyp;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

interface House{
    void buyHouse();
}

class Shmily implements House{
    @Override
    public void buyHouse() {
        System.out.println("  shmilylyp,         ");
    }
}

/**
 * jdk    
 */
class JDKProxy implements InvocationHandler{

    private Object oj;

    public JDKProxy(Object oj) {
        this.oj = oj;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("    ,        ");
        Object invoke = method.invoke(oj, args);
        System.out.println("       ");
        return invoke;
    }
}

public class Test07 {
    public static void main(String[] args) {
        Shmily shmily = new Shmily();
        JDKProxy jdkProxy = new JDKProxy(shmily);
        House house = (House) Proxy.newProxyInstance(shmily.getClass().getClassLoader(),
                shmily.getClass().getInterfaces(), jdkProxy);
        house.buyHouse();
    }
}

좋은 웹페이지 즐겨찾기