간단한 공장 패턴의 개념
공장 수업을 설정하고 동일한 인터페이스를 구현하는 일부 클래스의 인스턴스를 만드는 것입니다. 간단한 공장 패턴의 본질은 공장 클래스가 들어오는 매개 변수를 기반으로 어떤 제품 클래스 (부모 클래스 또는 인터페이스에서 상속되는 제품 클래스)의 인스턴스를 동적으로 결정한다는 것입니다.
간단한 공장 모드의 UML 다이어그램
간단한 공장 패턴 코드
간단한 공장 모델을 배울 때 인간과 관련된 예를 사용했습니다. 인간은 세계의 남성과 여성으로 나뉘며 먼저 인간 제품에 대한 추상 인터페이스를 정의합니다.
/** * 이것은 공장 패턴 패키지 */패키지 com.roc.factory;/** * 제품의 초록 인터페이스 human * @author liaowp */public interface human {public void say ();}그런 다음 남녀 모두 말할 방법이 있습니다.
/** * 이것은 공장 패턴 패키지 */패키지 com.roc.factory;/** * man man * @author liaowp * */public class man human {/ * say method * @see com.roc.factory.human#say () */@override public void says () {system.out.println ( "man"); }} /** * 이것은 공장 패턴 패키지 */패키지 com.roc.factory;/** woman * @author liaowp * */public class woman human {/ * say method * @see com.roc.factory.human#say () */@override public void say () {system.out.println ( "woman"); }}마지막으로, 공장 수업을 작성하여 남성과 여성을 창조하십시오. 첫 번째 방법은 논리적 판단을 사용하여 달성됩니다.
package com.roc.factory;/** * 간단한 공장 * @author liaowp */public class samplefactory {public static human makehuman (문자열 유형) {if (type.equals ( "man")) {human man = new man (); 귀환 남자; } else if (type.equals ( "womman")) {human woman = new woman (); 귀환 여자; } else {System.out.println ( "생산할 수 없음"); 널 리턴; }}}두 번째 방법은 Java 방사선을 사용하여 구현하는 것입니다. 이 유형의 구현이 더 좋다고 생각합니다.
패키지 com.roc.factory;/** * 간단한 공장 방사선 구현 * @author liaowp * */public class samplefactory1 {public static human makehuman (class c) {human human = null; try {human = (human) class.forname (c.getName ()). newInstance (); } catch (InstantiationException e) {// todo 자동 생성 캐치 블록 시스템 .out.println ( "초록 클래스 또는 인터페이스가 지원되지 않음"); e.printstacktrace (); } catch (불법 행위 exception e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); System.out.println ( "충분한 권한 없음, 즉 개인 개체에 액세스 할 수 없습니다"); } catch (classNotFoundException e) {// todo 자동 생성 캐치 블록 시스템.out.println ( "classnot ensists"); e.printstacktrace (); } 인간을 반환합니다. }}마지막으로, 고객의 코드
package com.roc.factory;/** * 간단한 공장 테스트 * @author liaowp * */public class client {public static void main (string [] args) {// human man = samplefactory.makehuman ( "man"); // man.say (); // human womman = samplefactory.makehuman ( "womman"); // womman "); SampleFactory.MakeHuman ( "TTTT"); 인간 = samplefactory1.makehuman (man.class); man.say (); 인간 여성 = samplefactory1.makehuman (woman.class); 여자 .say (); }} 간단한 공장 모드 응용 시나리오
장점 : 공장 클래스는 전체 모델의 핵심입니다. 여기에는 필요한 논리적 판단이 포함되어 있으며 외부 세계에서 제공 한 정보를 기반으로 어떤 특정 클래스 객체를 작성 해야하는지 결정합니다. 공장 클래스를 사용함으로써 외부 세계는 특정 제품 객체를 직접 생성하는 당혹스러운 상황을 제거 할 수 있으며 "소비"객체에 대해서만 책임을 져야합니다. 이 객체가 어떻게 만들어지고 구성되는지는 중요하지 않습니다. 그들의 각각의 책임과 권리는 명확 해져서 전체 소프트웨어 아키텍처의 최적화에 도움이됩니다.
단점 : 공장 계급은 모든 사례의 창조 논리를 집중시키기 때문에 높은 응집력있는 책임 할당의 원칙을 위반하기 때문에 모든 창조 논리는 하나의 공장 클래스에 집중됩니다. 그것이 만들 수있는 클래스는 미리 고려할 수 있습니다. 새 클래스를 추가 해야하는 경우 공장 클래스를 변경해야합니다. 시스템의 특정 제품 범주의 수가 계속 증가함에 따라, 공장 클래스가 다른 조건에 따라 다른 인스턴스를 만들어야하는 요구 사항이있을 수 있습니다. 이러한 특정 제품 유형의 조건 및 판단에 대한 판단 및 판단은 서로 연결되어있어 모듈 기능의 확산을 피하기가 어렵습니다. 이는 시스템 유지 관리 및 확장에 매우 바람직하지 않습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.