매 거, 상용 하 는 몇 가지 디자인 모델

34991 단어
1. 매 거
매 거 개술: 대상 의 개 수 는 이미 고정 되 었 고 개 수 는 제한 되 어 있다.
매 거 류 에는 방법, 구조 방법, 속성 이 있 을 수 있 지만 구조 방법 은 공공 이 될 수 없고 매 거 류 는 계승 할 수 없다.
public enum Sex {
    male(" "),
    female(" ");
    public String test(){
        return "ok";
    }
    private String cnName;
    public String cnName(){
        return this.cnName;
    }
    Sex(String name){
    this.cnName=name;
    }
}


public class EnumTest {
    public static void main(String[] args) {
        System.out.println(Sex.male.ordinal());
        System.out.println(Sex.female.ordinal());
        System.out.println(Sex.valueOf("male")==Sex.male);
        System.out.println(Sex.male.name());
        System.out.println(Sex.male.cnName());
    }
}

2. 디자인 모델
2.1 단일 모드
개요: 가상 컴퓨터 에서 이 종류의 인 스 턴 스 는 하나 입 니 다.
방법 1. 굶 주 림 식 (시작 할 때 만 들 기)
public class singletonDemo1 {
    //           
    public singletonDemo1() {
    }
    private static final singletonDemo1 me=new singletonDemo1();
    public static singletonDemo1 getMe(){
        return me;
    }
}

방법 2. 게으름뱅이 식 (호출 시 생 성)
public class singletonDemo2 {
    //           

    public singletonDemo2() {
    }
    private static singletonDemo2 me;
    public static singletonDemo2 getMe(){
        return me=new singletonDemo2();
    }
}

방법 3. 매 거 류 를 이용 하여 단 례 를 실현 하 는 것 은 굶 주 린 한식 에 속한다
public enum singletonDemo3 {
    me;
}

방법 4. 게으름뱅이 식 이 더욱 구현 된다 (정적 내부 클래스 가 유일한 실례 를 만 들 었 다)
public class singletonDemo4 {
    static {
        System.out.println("singletonDemo4    ");
    }
    public singletonDemo4() {
    }
    static class holder{
        static {
            System.out.println("holder    ");
        }
        static singletonDemo4 me=new singletonDemo4();
    }
    public static singletonDemo4 getme(){
        return holder.me;
    }
}

2.2 메타 모드
향 원 모델 은 새로운 대상 을 만 드 는 것 이 아니 라 기 존의 대상 을 다시 사용 하 는 것 을 제창한다.
	public class flyWeightDemo {
    //      Integer      -128 ~ 127
    public static void main(String[] args) {
        System.out.println(Integer.valueOf(1)==Integer.valueOf(1));
        System.out.println(Integer.valueOf(300)==Integer.valueOf(300));

    }
}

2.3 원형 모드
기 존 대상 에 따라 새로운 대상 을 만 들 고 복제 사용 장면 은 대상 의 속성 이 많 을 때 새로운 대상 의 대부분 속성 이 기 존 대상 에서 복사 되 기 를 바 랍 니 다.
public class User implements Cloneable {

    private String name;
    private int age;
    // ...
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

2.4 건설 기 모드
건설 기 모드 의 채택 은 우리 가 대상 을 만 드 는 과정 을 더욱 유연 하 게 하 는 것 이다.한 걸음 한 걸음 복잡 한 대상 을 구축 하 는 데 적용 된다.
public class Person {
//      :              。                  
    private String name;
    private int age;
    private String weight;
    private String height;

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getWeight() {
        return weight;
    }

    public String getHeight() {
        return height;
    }

    public Person(String name, int age, String weight, String height) {
        this.name = name;
        this.age = age;
        this.weight = weight;
        this.height = height;
    }
    public static class PersonBuilder{
        private String name;
        private int age;
        private String weight;
        private String height;

        public PersonBuilder name(String name) {
            this.name = name;
            return this;
        }
        public PersonBuilder age(int age) {
            this.age = age;
            return this;
        }

        public PersonBuilder height(String height) {
            this.height = height;
            return this;
        }

        public PersonBuilder weight(String weight) {
            this.weight = weight;
            return this;
        }

        public Person build(){
            return new Person(this.name,this.age,this.weight,this.height);

        }
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", weight='" + weight + '\'' +
                ", height='" + height + '\'' +
                '}';
    }
}

public class builderDemo {
    public static void main(String[] args) {
        Person personBuilder = new Person.PersonBuilder()
                .name("  ")
                .age(18)
                .height("1.78 ")
                .weight("50kg")
                .build();
        System.out.println(personBuilder);
    }
}

2.5 교체 기 모드
집합 내 요 소 를 일치 하 게 옮 겨 다 니 며 집합 내 데이터 구 조 를 신경 쓰 지 않 아 도 된다.
for(Object o :   ){
Iterator iter =   .iterator();
while(iter.hasNext()) {
	iter.next();
	}
}

ArrayList 배열 LinkedList 링크 링크 드 리스트 링크 HashSet 배열 + 링크 트 리 세트 이 진 트 리 - > 레 드 블랙 트 리
2.6 정책 모드
자바 집합 또는 배열 의 정렬 알고리즘 Collections. sort Arrays. sort 기본 유형 더 블 기점 빠 른 정렬 대상 유형 TimSort (초기 사용 병합 정렬) 규모 작은 삽입 정렬
정렬 알고리즘 은 고정 되 어 있 습 니 다. 정렬 규칙 은 고정 되 어 있 습 니까?... 할 수 없다
정렬 된 규칙 을 추출 하여 비교 기 인터페이스 (Comparator) 를 형성 하고 서로 다른 비교 기의 실현 을 전략 이 라 고 합 니 다.
open close 개폐 원칙 알고리즘 은 고 칠 수 없습니다. close 원칙 비교 기 는 고 칠 수 있 습 니 다. - open 원칙 을 나타 냅 니 다.
public class StrategyDemo {
    public static void main(String[] args) {
        ArrayList<student> list = new ArrayList<>();
        list.add(new student("  ",18));
        list.add(new student("  ",19));
        list.add(new student("  ",16));
        Collections.sort(list, (o1, o2) -> o1.getAge()-o2.getAge());
        System.out.println(list);
    }
}
class student{
    private String name;
    private int age;

    public student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

좋은 웹페이지 즐겨찾기