자바 디자인 모델-3 가지 공장 모델 상세 설명

단순 공장
간단 한 공장 모델 은 창설 형 모델 에 속 하고 공장 모델 의 일종 이다.간단 한 공장 모델 은 한 공장 대상 이 어떤 제품 류 의 인 스 턴 스 를 만 들 지 결정 하 는 것 이다.생 성 대상 의 클래스 를 정의 합 니 다.이 클래스 에서 실례 화 대상 의 행동(코드)을 봉인 합 니 다.우리 가 특정한,특정한 유형 또는 특정한 대상 을 대량으로 만 들 때 공장 모델 에 사용 된다.
인 스 턴 스 를 만 드 는 방법 은 보통 정적(static)방법 이기 때문에 간단 한 공장 모델 은 정적 공장 방법 모델(Static Factory Method)이 됩 니 다.
在这里插入图片描述
4.567917.제품 은 제품 인 터 페 이 스 를 나타 내 고 추상 적 인 유형 으로 실현 할 수 있 으 며 포장 제품 간 에 공유 하 는 속성 을 나타 낸다
  • Concrete 제품*은 구체 적 인 실제 제품 을 나타 낸다
  • 4.567917.Factory 는 공장 이 수요 에 따라 해당 하 는 제품 을 만 들 었 다 고 밝 혔 다이렇게 되면 신제품 C 를 추가 할 때 공장 의 일부 코드 만 수정 하면 되 고 전통 적 인 방법 은 제품 을 만 드 는 곳 마다 수정 해 야 한다.구체 적 인 제품 을 만들어 공장 류 로 포장 하 는 것 으로 이해 할 수 있다.
    예 를 들 어 큰 부자 의 지도 생 성:
  • AbstractBlock 은 인터페이스 로 추상 적 인 블록 을 나타 내 는데 방법 printBlock()인쇄 블록 을 포함한다
  • Empty,Prison,Park 는 상기 인 터 페 이 스 를 실현 하여 공지(*),감옥(&)과 공원(\#)을 나타 낸다
  • Simple Factory 는 땅 을 만 드 는 간단 한 공장 이다
  • 아 날로 그:
    在这里插入图片描述
    코드:
    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());
            }
        }
    }
    
    실행 결과:
    在这里插入图片描述
    在这里插入图片描述
    총결산
    이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 실 수 있 기 를 바 랍 니 다!

    좋은 웹페이지 즐겨찾기