원형 모델 과 창조 자 모델
3629 단어 디자인 모드
class A{
String name;
int age;
boolean sex;//man true;female false
int grade;
public A(){
name = "zhangsan";
age = 20;
sex = true;
grade = 3;
}
// getter and setter
public A clone(){
return new A();
}
}
clone 사용 ():
public static void main(String[] args) {
// TODO Auto-generated method stub
A a = new A();
A aa = a.clone();
a.name = "lisi";
}
A 대상 a 가 있 습 니 다. a 와 이름 만 다른 대상 이 필요 하 다 면 a 를 복제 하고 이름 을 바 꾸 면 됩 니 다.
이 가능 하 다, ~ 할 수 있다,...이런 상황 에서 이상 의 방법 을 사용 하면 안 된다.자바 에 서 는 직렬 화 체 제 를 제공 합 니 다. Serializable 인 터 페 이 스 를 실현 하 는 클래스 라면 모두 직렬 화 될 수 있 습 니 다. 그러면 우 리 는 더 좋 은 clone () 을 다시 쓸 수 있 습 니 다.예:
class Test implements Serializable{
B b = new B();
public Object deepClone()throws IOException, ClassNotFoundException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(this);
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
Test2 test = (Test2)ois.readObject();
return test;
}
}
class B implements Serializable{
}
이렇게 되면 deepClone () 을 호출 하면 새로운 대상 을 만 들 수 있다.주의해 야 할 것 은 직렬 화 하려 는 클래스 에 인용 형식 이 Serializable 인 터 페 이 스 를 실현 하지 못 하면 프로그램 에 이상 이 생 길 수 있다 는 것 이다.
이상 은 원형 모델 입 니 다. 다음은 건축 자 모델 을 말씀 드 리 겠 습 니 다.
건축 자 모델 도 흔 하지 않 고 자세히 말 하지 않 겠 다.코드 바로 올 려 주세요.
class Product{
String part1;
String part2;
String part3;
String part4;
}
class Derector{
AbstractBuilder a;
public Derector(){
}
public Derector(AbstractBuilder a){
this.a = a;
}
public Product construct(){
a.buildPart1();
a.buildPart2();
a.buildPart3();
a.buildPart4();
return a.getResult();
}
}
abstract class AbstractBuilder{
protected Product product = new Product();
abstract void buildPart1();
abstract void buildPart2();
abstract void buildPart3();
abstract void buildPart4();
public Product getResult(){
return product;
}
}
class Builder1 extends AbstractBuilder{
@Override
public void buildPart1() {
// TODO Auto-generated method stub
product.part1 = " part 1";
}
@Override
public void buildPart2() {
// TODO Auto-generated method stub
product.part2 = " part 2";
}
@Override
public void buildPart3() {
// TODO Auto-generated method stub
product.part3 = " part 3";
}
@Override
public void buildPart4() {
// TODO Auto-generated method stub
product.part4 = " part 4";
}
}
class Builder2 extends AbstractBuilder{
@Override
public void buildPart1() {
// TODO Auto-generated method stub
product.part1 = " part 1";
}
@Override
public void buildPart2() {
// TODO Auto-generated method stub
product.part2 = " part 2";
}
@Override
public void buildPart3() {
// TODO Auto-generated method stub
product.part3 = " part 3";
}
@Override
public void buildPart4() {
// TODO Auto-generated method stub
product.part4 = " part 4";
}
}
코드 가 비교적 길 지만 매우 간단 하 다.그만 해.
지금까지 다섯 개의 디자인 모델 을 배 웠 는데 이 다섯 가 지 는 하나의 유형 으로 분류 되 었 다. 즉, 창설 형 디자인 모델 이다.이 다섯 가지 디자인 모델 을 배 웠 으 니 시스템 이 비교적 좋 은 확장 성 을 가 지 려 면 추상 적 인 프로 그래 밍 을 해 야 한다. 그래 야 '변 하지 않 고 변화 에 응 할 수 있다' 는 것 을 뚜렷하게 발견 할 수 있다. 추상 적 인 것 일수 록 적용 범위 가 넓 어 지 는 것 이 정말 맞다.
다음은 구조 적 디자인 모델 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.