자바 프로젝트(5)-단일 모드의 응용 및 연구
4
//
Class XmlConfigReader{
private static XmlConfigReader instance=new XmlConfigReader();
private XmlConfigReader(){
}
public static XmlConfigReader getInstance(){
return instance;
}
}
4
// ( lazy)
Class XmlConfigReader{
private static XmlConfigReader instance =null;
public static synchronized XmlConfigReader getInstance(){
if(instance==null){
instance=new XmlConfigReader();
}
return instance;
}
}
우리는 흔히'Double-Check Locking'즉'이중 잠금'이라는 개념을 듣는다. 이것은 잠금을 추가하는 방식, 즉 Lock을 사용하기 때문이다.
Class XmlConfigReader{
private static XmlConfigReader instance;
private static readonly object syncRoot=new object();
private XmlConfigReader(){
}
public static XmlConfigReader getInstance(){
if(instance==null){
Lock( syncRoot) {
if(instance==null){
instance=new XmlConfigReader();
}
}
}
return instance;
}
}
비교:
단례 모델은 두 가지로 나뉘는데 이런 정적 초기화 방식은 클래스가 불러올 때 실례화되고 게으름뱅이가 처음 인용될 때 실례화되는 것보다 시스템 자원을 미리 차지하는 것이다.그러나 게으름뱅이는 자물쇠를 채워 다선정 방문의 안전성을 확보해야 하지만 굶주린 사람은 필요 없다.우리는 그 선자를 골라서 쓸 수밖에 없다.
프로젝트의 단일 예제 적용:
DRP에는 거의 모든 모듈에 Manager가 있습니다. 시스템 개발 초기에는 ClientManager만 있었으므로 다음과 같은 단일 모드를 사용했습니다.
public class ClientManager {
private static ClientManager instance=new ClientManager();
private ClientManager(){}
public static ClientManager getInstance(){
return instance;
}
}
시스템의 복잡도가 증가함에 따라
,
점점 더 많이 나와요.
Manager
,
예컨대
ItemManager,FlowCardManager
등.
,
그리고 이때
Manager
및
Dao
분리를 했어요.
,
계층화
.
시스템은 추상적인 공장을 채택했다
+
반사 기술 실현
Manager
종류
Dao
클래스의 실례화
.
일례로 또 공장에 응용되었다
.
public class BeanFactory {
private static BeanFactory instance=new BeanFactory();
private final String beansConfigFile="beans-config.xml";
private Document doc;
private BeanFactory(){
try {
doc=new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream(beansConfigFile));
} catch (DocumentException e) {
e.printStackTrace();
throw new RuntimeException();
}
}
public static BeanFactory getInstance(){
return instance;
}
}
아래의 이 코드는 공장 클래스에서 얻은 것이다
Manager
실현
.
처음에는 형원 모드인 줄 알았어요.
,
그래서 이게 형원 모델보다 더 유연하게 이루어지는 거예요.
.
그것은 대상이 단지 하나의 실례만을 보장할 수 있다
,
그래서 단일 모드의 응용이다
.
뒤에 가면 갈수록 더 많이 써요.
,
이미 어떤 모델이나 기술에만 국한된 것이 아니다
,
향원
,
단례
,
공장
,
대리점
……
// Service
private Map serviceMap=new HashMap();
/**
* service
* @param beanId
* @return
*/
public synchronized Object getServiceObject(Class c){
// ,
if(serviceMap.containsKey(c.getName())){
return serviceMap.get(c.getName());
}
Element beanElt=(Element)doc.selectSingleNode("//service[@id=\"" + c.getName() +"\"]");
String className=beanElt.attributeValue("class");
Object service=null;
try {
service=Class.forName(className).newInstance();
// map
serviceMap.put(c.getName(), service);
} catch (Exception e) {
throw new RuntimeException();
}
return service;
}
위의 분석 및 적용을 통해 단일 사례 모델의 중점을 살펴봅니다.
실현에 있어 사유 정적 구성원 변수/사유 구조 방법/공공의 정적 방법;전역 접근과 실례화 제어 문제를 해결했다.
단례의 의미는 창설에 있지 않고 방문에 있다. 즉, 방문하거나 호출할 대상이 존재하지 않으면 하나를 창설한다. 이것은 유일한 것이고 이후에 다시 창설할 수 없다.존재하면 이 대상을 되돌려줍니다. 비록 이 대상의 속성은 재부여된 값이 수차례 바뀌었지만, 대상은 유일하지만 고정불변한 것이 아닙니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.