자바 디자인 모델-3 가지 공장 모델 상세 설명
간단 한 공장 모델 은 창설 형 모델 에 속 하고 공장 모델 의 일종 이다.간단 한 공장 모델 은 한 공장 대상 이 어떤 제품 류 의 인 스 턴 스 를 만 들 지 결정 하 는 것 이다.생 성 대상 의 클래스 를 정의 합 니 다.이 클래스 에서 실례 화 대상 의 행동(코드)을 봉인 합 니 다.우리 가 특정한,특정한 유형 또는 특정한 대상 을 대량으로 만 들 때 공장 모델 에 사용 된다.
인 스 턴 스 를 만 드 는 방법 은 보통 정적(static)방법 이기 때문에 간단 한 공장 모델 은 정적 공장 방법 모델(Static Factory Method)이 됩 니 다.
4.567917.제품 은 제품 인 터 페 이 스 를 나타 내 고 추상 적 인 유형 으로 실현 할 수 있 으 며 포장 제품 간 에 공유 하 는 속성 을 나타 낸다
예 를 들 어 큰 부자 의 지도 생 성:
코드:
1.제품 인터페이스
public interface AbstractBlock {
public void printBlock();
}
2.제품 인터페이스 구현 하위 클래스
public class Empty implements AbstractBlock{
@Override
public void printBlock() {
System.out.print("* ");
}
}
public class Park implements AbstractBlock{
@Override
public void printBlock() {
System.out.print("# ");
}
}
public class Prison implements AbstractBlock{
@Override
public void printBlock() {
System.out.print("& ");
}
}
3.단순 공장 류
public class SimpleFactory {
public AbstractBlock getBlock(String type){ //
if(type.equalsIgnoreCase("Empty")){
return new Empty();
} else if(type.equalsIgnoreCase("Park")){
return new Park();
} else if(type.equalsIgnoreCase("Prison")){
return new Prison();
}
return null;
}
}
4.공장 호출
public class Map {
public void getMap(){
SimpleFactory simpleFactory=new SimpleFactory(); //
ArrayList<AbstractBlock> map=new ArrayList<AbstractBlock>(); //
String []types=new String[3];
types[0]="Empty";
types[1]="park";
types[2]="Prison";
Random rd = new Random();
for(int i=1;i<=12;i++){ //
int tt = rd.nextInt(types.length);
map.add(simpleFactory.getBlock(types[tt]));
}
// ,
for(int i=0;i<12;i++){
map.get(i).printBlock();
if(i==3||i==5||i==7)
System.out.println();
if(i==4||i==6)
System.out.print(" ");
}
}
}
5.테스트
public class MonoPoly {
public static void main(String[] args) {
Map map=new Map();
map.getMap();
}
}
실행 결과공장 방법
새로운 제품 을 추가 할 때 간단 한 공장 류 를 수정 하거나 여러 개의 간단 한 공장 을 만들어 야 한 다 는 것 을 어렵 지 않 게 발견 할 수 있다.예 를 들 어 법원 블록 을 추가)공장 방법 을 결합 시 키 고 공장 류 를 추상 적 으로 만 들 며 모든 사례 의 생 성 을 책임 지지 않 고 구체 적 인 생 성 업 무 를 하위 클래스 에 맡 기 고 사례 화 는 하위 클래스 로 지연 시 키 며 하위 클래스 에 의 해 정례 화 할 유형 을 결정 한다.
추상 적 인 화학 공장 류 는 구체 적 인 실례 화 작업 을 그 하위 류 에 맡 겨 실현 한다.
코드:
1.공장 인터페이스
public interface AbstractFactory {
public AbstractBlock createBlock();
}
2.공장 실현 하위 클래스
public class EmptyFactory implements AbstractFactory {
@Override
public AbstractBlock createBlock() {
return new Empty();
}
}
public class ParkFactory implements AbstractFactory {
@Override
public AbstractBlock createBlock() {
return new Park();
}
}
public class PrisonFactory implements AbstractFactory {
@Override
public AbstractBlock createBlock() {
return new Prison();
}
}
3.제품 인터페이스
public interface AbstractBlock {
public void printBlock();
}
4.제품 실현 하위 클래스
public class Empty implements AbstractBlock {
@Override
public void printBlock() {
System.out.print("* ");
}
}
public class Park implements AbstractBlock {
@Override
public void printBlock() {
System.out.print("# ");
}
}
public class Prison implements AbstractBlock {
@Override
public void printBlock() {
System.out.print("& ");
}
}
5.호출
public class Map {
public void getMap() {
ArrayList<AbstractBlock> map=new ArrayList<AbstractBlock>(); //
AbstractFactory abstractFactory;
Random rd = new Random();
for(int i=1;i<=12;i++){ //
int tt = rd.nextInt(3);
if(tt==0)abstractFactory=new EmptyFactory();
else if(tt==1)abstractFactory=new ParkFactory();
else abstractFactory=new PrisonFactory();
map.add(abstractFactory.createBlock());
}
// ,
for(int i=0;i<12;i++){
map.get(i).printBlock();
if(i==3||i==5||i==7)
System.out.println();
if(i==4||i==6)
System.out.print(" ");
}
}
}
6.테스트
public class MonoPoly {
public static void main(String[] args) {
Map map=new Map();
map.getMap();
}
}
실행 결과:추상 공장
새로운 제품 인 터 페 이 스 를 만 들 때 도 공장 방법 을 수정 하거나 여러 공장 을 만 드 는 방법 이 필요 하 다 는 것 을 발견 하기 어렵 지 않다.예 를 들 어 마법 의 땅 덩이 를 늘 리 고 해당 제품 의 마법 공원,마법 의 공 터,마법 감옥 등)
추상 적 인 공장 은 공장 방법 을 더욱 추상적으로 한다.구체 적 인 클래스 를 가리 키 지 않 고 관련 되 거나 의존 관계 가 있 는 대상 클 러 스 터 를 만 드 는 데 사용 할 인 터 페 이 스 를 정의 합 니 다.창설 대상 유형 에 따라 대응 하 는 공장 서브 클래스 를 사용 할 수 있 습 니 다.이렇게 하면 하나의 간단 한 공장 류 를 공장 클 러 스 터 로 바 꾸 어 코드 의 유지 와 확장 에 더욱 유리 하 다.
공장 류 를 추상 화한 후 서로 다른 하위 공장(일반/마법)에 대응 하여 해당 하 는 제품 을 생산 한다.마지막 으로 호출 할 때 추상 적 인 인 터 페 이 스 를 통일 적 으로 호출 하면 됩 니 다.구체 적 인 대상 을 알 필요 없 이 인터페이스 로 프로 그래 밍 합 니 다.
1.제품 인터페이스
public interface AbstractBlock {
void printBlock();
}
2.제품 추상 서브 클래스-일반 제품
public abstract class NormalAbstractBlock implements AbstractBlock {
public abstract void printBlock();
}
2.2 일반 공 터
public class NormalEmpty extends NormalAbstractBlock {
public void printBlock() {
System.out.print("* ");
}
}
2.일반 공원
public class NormalPark extends NormalAbstractBlock {
public void printBlock() {
System.out.print("# ");
}
}
2.4 일반 감옥
public class NormalPrison extends NormalAbstractBlock {
public void printBlock() {
System.out.print("& ");
}
}
3.1 제품 추상 서브 클래스-마법 제품
public abstract class MagicAbstractBlock implements AbstractBlock {
public abstract void printBlock();
}
3.2 마법 의 공 터
public class MagicEmpty extends MagicAbstractBlock {
public void printBlock() {
System.out.print("e ");
}
}
3.3 마법 공원
public class MagicPark extends MagicAbstractBlock {
public void printBlock() {
System.out.print("g ");
}
}
3.4 마법 감옥
public class MagicPrison extends MagicAbstractBlock {
public void printBlock() {
System.out.print("p ");
}
}
4.공장 인터페이스
public interface AbstractFactory {
AbstractBlock getEmpty();
AbstractBlock getPrison();
AbstractBlock getPark();
}
5.공장 실현 하위-일반 공장
public class NormalFactory implements AbstractFactory {
public AbstractBlock getEmpty() { return new NormalEmpty(); }
public AbstractBlock getPrison() { return new NormalPrison(); }
public AbstractBlock getPark() { return new NormalPark(); }
}
6.공장 실현 서브 클래스-마법 공장
public class MagicFactory implements AbstractFactory {
public AbstractBlock getEmpty() { return new MagicEmpty(); }
public AbstractBlock getPrison() {return new MagicPrison(); }
public AbstractBlock getPark() { return new MagicPark(); }
}
7.호출
public class Map {
public void getMap(AbstractFactory af){
ArrayList<AbstractBlock> map=new ArrayList<AbstractBlock>();
map.add(af.getEmpty());
map.add(af.getPrison());
map.add(af.getPark());
Random rd = new Random(3);
int col=12;
for(int i=1;i<=col;i++){
int tt = rd.nextInt(3);
map.get(tt).printBlock();
if(i==4||i==6||i==8)
System.out.println();
if(i==5||i==7)
System.out.print(" ");
}
}
}
8.테스트
public class Monopoly {
public void play(){
Map map=new Map();
Scanner scan = new Scanner(System.in);
System.out.println(" (1 ,2 )");
int order;
order = scan.nextInt();
if(order == 1){
map.getMap(new NormalFactory());
}else{
map.getMap(new MagicFactory());
}
}
}
실행 결과:총결산
이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.