매 거, 상용 하 는 몇 가지 디자인 모델
매 거 개술: 대상 의 개 수 는 이미 고정 되 었 고 개 수 는 제한 되 어 있다.
매 거 류 에는 방법, 구조 방법, 속성 이 있 을 수 있 지만 구조 방법 은 공공 이 될 수 없고 매 거 류 는 계승 할 수 없다.
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 +
'}';
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.