디자인 모드 학습 노트:02 단순 공장 모드

2219 단어
플랜트 객체에 의해 작성되는 제품 클래스의 인스턴스는 작성 모델에 속합니다.
송신 인터페이스 정의
public interface Sender {
     public void Send(); 
}

그리고 실현된 두 가지 문자 발송과 메일 발송
public class MailSender implements Sender {
@Override
    public void Send() {
        System.out.println("this is mail  sender!");
    }
}

문자 메시지 보내기
public class SmsSender implements Sender {
@Override
    public void Send() {
        System.out.println("this is sms sender!");
    }
}

공장 건설
public class NormalFactory {
    public Sender produce(String type) {
        if ("mail".equals(type)) {
            return new MailSender();
        } else if ("sms".equals(type)) {
            return new SmsSender();
        } else {
            System.out.println(" !");
            return null;
        }
    }
}

테스트 포털에서 테스트
public class FactoryTest {
public static void main(String[] args) {
    normalFactory();
//  multiFactory();
//  staticFactory();
    }

//  
private static void normalFactory() {
    NormalFactory factory = new NormalFactory();
    Sender sender = factory.produce("sms");
    sender.Send();
    }

//  
private static void multiFactory() {
    MultiFactory factory = new MultiFactory();
    Sender sender = factory.produceMail();
    sender.Send();
    }

//    
private static void staticFactory() {
    Sender sender = StaticFactory.produceMail();
    sender.Send();
    }
}

물론 제품이 많으면 이렇게 쓰는 것은 비효율적이며, 여러 공장 방법 모델을 사용한다
public class MultiFactory {
public Sender produceMail() {
    return new MailSender();
    }

public Sender produceSms() {
    return new SmsSender();
    }
}

또는 정적 방식 사용
 public class StaticFactory {
        public static Sender produceMail() {
            return new MailSender();
            }

            public static Sender produceSms() {
            return new SmsSender();
        }
}

호출 방법은 테스트 클래스에서 장면의 이해를 사용한다. 예를 들어 서로 다른 모듈이 네트워크 요청에 대해 정적 방식으로 서로 다른 모듈의 네트워크 요청을 창조하여 실현할 수 있다.공장 클래스는 항상 이 추상 클래스로 돌아간다. 그러면 원래의 기능을 변경하거나 새로운 기능을 추가하면 원래의 다른 클래스도 수정하지 않는다.

좋은 웹페이지 즐겨찾기