디자인 모델 학습 의 공장 모델
단순 공장
간단 한 공장 은 엄 밀 히 말 하면 23 가지 디자인 모델 의 하나 에 속 하지 않 고 대상 을 만 드 는 과정 을 방법 에 밀봉 할 뿐이다.
다음은 간단 한 공장 의 구체 적 인 실례 이다
Animal 인 터 페 이 스 를 만 들 고 공공 방법 을 정의 합 니 다.
public interface IAnimal {
void eat();
}
Animal 구현 클래스 만 들 기
Bird.class
public class Bird implements IAnimal{
@Override
public void eat(){
System.out.println("bird eating...");
}
}
Cat.class
public class Cat implements IAnimal{
@Override
public void eat(){
System.out.println("cat eating...");
}
}
공장 클래스 AnimalFactory 만 들 기
public class AnimalFactory {
public static IAnimal instance(Class> clazz){
if(clazz == null) return null;
return instance(clazz.getName());
}
private static IAnimal instance(String name){
if(name == null || "".equals(name)) return null;
try {
return (IAnimal)Class.forName(name).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
테스트 사례
public class Main {
public static void main(String[] args) {
IAnimal animal = AnimalFactory.instance(Cat.class);
animal.eat();
}
}
출력 결과
cat eating...
2 공장 방법
우리 가 대상 을 만 드 는 전후 에 서로 다른 업무 논 리 를 실행 해 야 할 때 상기 코드 는 큰 변동 이 필요 하 다.
공장 방법 모델 은 모든 대상 에 대응 하 는 공장 을 만 들 고 모든 대상 의 공장 설립 은 서로 독립 적 이다.
공공 공장 만 들 기 Animal Factory
public interface IAnimalFactory {
IAnimal instance();
}
창설 대상 공장 실현
BirdFactory.class
public class BirdFactory implements IAnimalFactory{
@Override
public IAnimal instance() {
return new Bird();
}
}
CatFactory.class
public class CatFactory implements IAnimalFactory{
@Override
public IAnimal instance() {
return new Cat();
}
}
위 와 같이 대응 하 는 instance 방법 에 해당 하 는 처리 논 리 를 추가 할 수 있 습 니 다.
테스트 사례
public class Main {
public static void main(String[] args) {
IAnimalFactory animalFactory = new BirdFactory();
IAnimal animal = animalFactory.instance();
animal.eat();
}
}
출력 결과
bird eating...
3 추상 공장
하나의 제품 을 추가 할 때마다 공장 방법 모델 은 하나의 공장 을 만들어 야 하 는데 오래 되 고 오래 되 는 것 과 같은 것 이 매우 많다.
공장 방법 모델 도 구체 적 인 행위 가 있 는 제품 을 구축 할 수 없다.
추상 공장 의 이념 은 추상 적 이 고 공장 을 가공 하여 최종 적 으로 구체 적 인 행 위 를 가 진 제품 을 생 성 하 는 것 이다.
생 성 행위
public interface ICreate {}
public interface IDead {}
public interface ILive {}
구체 적 인 행동 이 있 는 제품 만 들 기
bird
public class BirdCreate implements ICreate{
public BirdCreate(){
System.out.println("bird create...");
}
}
public class BirdDead implements IDead{
public BirdDead(){
System.out.println("bird dead...");
}
}
public class BirdLive implements ILive{
public BirdLive(){
System.out.println("bird live...");
}
}
cat
public class CatCreate implements ICreate{
public CatCreate(){
System.out.println("cat create...");
}
}
public class CatDead implements IDead{
public CatDead(){
System.out.println("cat dead...");
}
}
public class CatLive implements ILive{
public CatLive(){
System.out.println("cat live...");
}
}
공장 을 창건 하 다
public interface IAnimalFactory {
//
ICreate create();
//
ILive live();
//
IDead dead();
}
마지막 으로 구체 적 인 제품 공장 을 실현 하 다.
BirdFactory
public class BirdFactory implements IAnimalFactory {
@Override
public ICreate create() {
return new BirdCreate();
}
@Override
public ILive live() {
return new BirdLive();
}
@Override
public IDead dead() {
return new BirdDead();
}
}
CatFactory
public class CatFactory implements IAnimalFactory {
@Override
public ICreate create() {
return new CatCreate();
}
@Override
public ILive live() {
return new CatLive();
}
@Override
public IDead dead() {
return new CatDead();
}
}
테스트 사례
public class Main {
public static void main(String[] args) {
IAnimalFactory animalFactory = new CatFactory();
animalFactory.create();
animalFactory.live();
animalFactory.dead();
}
}
출력 결과
cat create...
cat live...
cat dead...
추상 적 인 공장 모델 은 개폐 원칙 에 부합 되 지 않 고 행 위 를 증가 할 때 모든 구체 적 인 실현 은 해당 하 는 행 위 를 증가 해 야 한다.
ps: 이상 인 터 페 이 스 는 추상 클래스 로 대체 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.