단일 모드 와 공장 모드
4405 단어 자바
단일 모델 은 자주 사용 하 는 소프트웨어 디자인 모델 이다.그것 의 핵심 구조 에는 단 례 류 라 고 불 리 는 특수 류 만 포함 되 어 있다.단일 사례 모델 을 통 해 시스템 의 한 가지 사례 만 있 고 이 사례 는 외부 방문 이 쉬 워 서 사례 개수 에 대한 통제 와 시스템 자원 을 절약 할 수 있다.시스템 에서 어떤 유형의 대상 이 하나만 존재 하 기 를 원한 다 면 단일 모델 이 가장 좋 은 해결 방안 이다.
방법 1:
public class Singleton{
public static Singleton instance == null;
private singleton() { }
public static Singleton getSingleton(){
if(null == instance){
instance = new Singleton();
}
return instance;
}
}
방법 2:
public class Singleton2 {
private static Singleton2 instance2 = null;
public static synchronized Singleton2 getInstance() {
if (instance2 == null)
instance2 = new Singleton2();
return instance2;
}
}
장점.
실례 제어
단일 모드 는 다른 대상 이 자신의 단일 대상 의 사본 을 예화 하 는 것 을 막 아 모든 대상 이 유일한 인 스 턴 스 에 접근 하도록 확보한다.
유연성
클래스 가 실례 화 과정 을 제어 하기 때문에 클래스 는 실례 화 과정 을 유연 하 게 변경 할 수 있다.
2.공장 모델공장 모델 은 대량의 공동 인터페이스(또는 공동 추상 부류)가 있 는 유형 을 예화 하 는 것 을 전문 적 으로 책임 지고 매번 어떤 유형의 모델 을 예화 해 야 하 는 지 미리 알 필요 가 없다.이것 은 대상 을 만 드 는 데 사용 할 인 터 페 이 스 를 정의 합 니 다.하위 클래스 에서 어떤 종 류 를 예화 할 지 결정 합 니 다.
장점 공장 류 는 전체 모델 의 관건 이다.필요 한 논리 적 판단 을 포함 하고 외부 에서 주어진 정보 에 따라 어떤 구체 적 인 대상 을 만들어 야 할 지 결정 한다.공장 류 를 사용 하면 외부 에서 구체 적 인 제품 대상 을 직접 만 드 는 난처 한 국면 에서 벗 어 날 수 있 고'소비'대상 만 책임 지면 된다.이런 대상 이 도대체 어떻게 만 들 고 어떻게 조직 하 는 지 상관 할 필요 가 없다.각자 의 직책 과 권 리 를 명 확 히 하고 전체 소프트웨어 체계 구조의 최적화 에 유리 하 다.단점 은 공장 류 가 모든 실례 의 창설 논 리 를 집중 시 켰 기 때문에 높 은 내부 집합 책임 분배 원칙 을 위반 하고 모든 창설 논 리 를 한 공장 류 에 집중 시 켰 다.그것 이 만 들 수 있 는 종 류 는 사전에 고려 할 수 밖 에 없 으 며,새로운 종 류 를 추가 하려 면 공장 류 를 바 꿔 야 한다.시스템 의 구체 적 인 제품 류 가 계속 증가 할 때 공장 류 가 서로 다른 조건 에 따라 서로 다른 사례 를 만들어 야 한 다 는 수요 가 나타 날 수 있다.이런 조건 에 대한 판단 과 구체 적 인 제품 유형 에 대한 판단 이 교차 되 어 모듈 기능 의 확산 을 피하 기 어렵 고 시스템 의 유지 와 확장 에 매우 불리 하 다.이런 결점 들 은 공장 방법 모델 에서 어느 정도 극복 되 었 다.장면 공장 류 를 사용 하여 창설 을 책임 지 는 대상 이 비교적 적다.고객 은 공장 류 에 들 어 오 는 매개 변수 만 알 고 대상(논리)을 어떻게 만 드 는 지 에 관심 이 없다.단순 공장 은 높 은 내부 집적 책임 배분 원칙 을 위반 하기 쉬 워 간단 한 경우 에 만 적용 된다.
구체 적 인 예:
애 니 멀 추상 류
package com.bean;
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("I am a Cat,I like eat fish!!");
}
}
세 가지 구체 적 인 동물 류
package com.bean;
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("I am a Cat,I like eat fish!!");
}
}
package com.bean;
public class Dog extends Animal{
@Override
public void eat() {
System.out.println("I am a dog,I like eat feat!!!!!");
}
}
package com.bean;
public class Sheep extends Animal{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void eat() {
// TODO Auto-generated method stub
}
}
공장 류
package com.factory;
import com.bean.Animal;
import com.bean.Cat;
import com.bean.Dog;
import com.bean.Sheep;
public class Animal_Factory {
private static Animal animal = null;
public static Animal getAnimal(String animal_name){
if(animal_name.equals("Dog")){
animal = new Dog();
}
if(animal_name.equals("Cat")){
animal = new Cat();
}
if(animal_name.equals("Sheep")){
animal = new Sheep();
}
return animal;
}
}
테스트 클래스:
package com.factory.test;
import com.bean.Animal;
import com.factory.Animal_Factory;
public class Factory_Test {
/**
* @param args
*/
public static void main(String[] args) {
Animal animal_a = Animal_Factory.getAnimal("Dog");
animal_a.eat();
Animal animal_b = Animal_Factory.getAnimal("Cat");
animal_b.eat();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.