단순 공장, 공장 방법 과 추상 공장
디자인 모델 을 배우 기 전에 대상 을 대상 으로 하 는 디자인 원칙 의 6 원칙 1 법칙 을 먼저 배 울 수 있다. 그들 은 디자인 모델 과 서로 표리 가 되 고 일맥상통 한다.또한 공장 디자인 모델 은 Spring 소스 코드, JDK 소스 코드, 실제 생산 공정 에 도 널리 활용 된다.
단순 공장
적용 범위: 여러 곳 에서 '공 통 된 특징 이 있 는' 인 스 턴 스 를 만들어 야 할 때 구체 적 으로 실현 한다. 한 가지 대상 의 실례 를 한 공장 에 두 고 공장 소지 자가 인 스 턴 스 를 만들어 야 할 때 공장 대상 에 게 가 져 가면 된다. 구체 적 인 공장 대상 이 몇 가지 인 스 턴 스 를 제공 할 수 있 는 지, 인 스 턴 스 의 생 성 과정 에 어떤 복잡 한 조작 이 필요 한 지,공장 소유 자 는 결코 관심 을 가 질 필요 가 없다.예 를 들 어 세 가지 제품 이 있 는데 사용 자 는 콘 솔 에서 제품 유형 을 입력 한 다음 에 시스템 이 해당 모델 의 제품 으로 돌아간다.
간단 한 공장 모델 을 사용 하 는 코드 는 다음 과 같다.
package com.zenghui.factory.pattern;
import java.util.Scanner;
public class SimpleFactoryDemo {
public static void main(String[] args) {
SimpleFactory simpleFactory = new SimpleFactory();
Scanner input = new Scanner(System.in);
System.out.println(" , :");
int type1 = input.nextInt();
System.out.print(" :");
System.out.println(simpleFactory.createProduct(type1));
System.out.println(" , :");
int type2 = input.nextInt();
System.out.print(" :");
System.out.println(simpleFactory.createProduct(type2));
}
}
interface Product {
}
class ConcreteProduct implements Product {
}
class ConcreteProduct1 implements Product {
}
class ConcreteProduct2 implements Product {
}
class SimpleFactory {
public Product createProduct(int type){
if (type ==1 ){
return new ConcreteProduct1();
}else if (type == 2){
return new ConcreteProduct2();
}else {
return new ConcreteProduct();
}
}
}
공장 모델 을 사용 하지 않 으 면 무슨 문제 가 생 길 까?
공장 모드 를 사용 하지 않 으 면 main 함수 에 두 번 의 판단 을 쓸 수 있 습 니 다. main 코드 는 다음 과 같 습 니 다.
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Product product1;
System.out.println(" , :");
int type2 = input.nextInt();
System.out.print(" :");
if (type2 ==1 ){
product1 = new ConcreteProduct1();
}else if (type2 == 2){
product1 = new ConcreteProduct2();
}else {
product1 = new ConcreteProduct();
}
System.out.println(product1);
Product product2;
System.out.println(" , :");
int type2 = input.nextInt();
System.out.print(" :");
if (type2 ==1 ){
product2 = new ConcreteProduct1();
}else if (type2 == 2){
product2 = new ConcreteProduct2();
}else {
product2 = new ConcreteProduct();
}
System.out.println(product2);
}
여기에 코드 의 중복 이 나 타 났 고 같은 논리 적 인 코드 는 두 번 썼 다.문 제 는:
공장 방법
공장 방법 은 사실 계승 과 다 태 적 인 응용 이다.OOP 특성 - 계승, 부모 클래스 의 코드 를 OOP 특성 - 다 중 으로 재 활용 하여 방법 을 동적 으로 연결 할 수 있 습 니 다.
package com.zenghui.factory.pattern;
public class FactoryMethodDemo {
public static void main(String[] args) {
System.out.println(" 1, :");
Factory concreteFactory1 = new ConcreteFactory1();
Factory concreteFactory2 = new ConcreteFactory2();
Product product = concreteFactory1.factoryMethod();
concreteFactory1.createAndWrap();
System.out.println();
System.out.println(" 2, :");
concreteFactory2.createAndWrap();
}
}
abstract class Factory{
abstract Product factoryMethod();
public void createAndWrap(){
Product product = factoryMethod();
System.out.println(" :" + product);
System.out.println("。。。。 !");
}
}
class ConcreteFactory extends Factory {
public Product factoryMethod() {
return new ConcreteProduct();
}
}
class ConcreteFactory1 extends Factory {
public Product factoryMethod() {
return new ConcreteProduct1();
}
}
class ConcreteFactory2 extends Factory {
public Product factoryMethod() {
return new ConcreteProduct2();
}
}
공장 방법 을 사용 하지 않 으 면 무슨 문제 가 생 길 까?
공장 방법 을 사용 하지 않 으 면 각
Factory
의 자 류 는 한 번 씩 createAndWrap()
방법 을 써 야 한다.추상 공장
추상 적 인 공장 은 간단 한 공장 과 공장 방법의 결합 과 같다.그 는 단순 공장 처럼 다른 대상 을 만 들 수 있다.그 는 공장 방법 처럼 추상 류 를 계승 하여 자 류 공장 을 서로 다른 실현 을 하 게 했다.
추상 적 인 공장 의 역할 은 서로 다른 계열 의 제품 을 만 드 는 것 이다. 예 를 들 어 제품 을 1 시리즈 와 2 시리즈 로 나 누 는 것 이다.
package com.zenghui.factory.pattern;
public class AbstractFactoryDemo {
public static void main(String[] args) {
AbstractFactory abstractFactory = new ConcreteFactoryD1();
AbstractProductA productA = abstractFactory.createProductA();
AbstractProductB productB = abstractFactory.createProductB();
// do something with productA and productB
}
}
class AbstractProductA {
}
class AbstractProductB {
}
class ProductA1 extends AbstractProductA {
}
class ProductA2 extends AbstractProductA {
}
class ProductB1 extends AbstractProductB {
}
class ProductB2 extends AbstractProductB {
}
abstract class AbstractFactory {
abstract AbstractProductA createProductA();
abstract AbstractProductB createProductB();
}
class ConcreteFactoryD1 extends AbstractFactory {
AbstractProductA createProductA() {
return new ProductA1();
}
AbstractProductB createProductB() {
return new ProductB1();
}
}
class ConcreteFactoryD2 extends AbstractFactory {
AbstractProductA createProductA() {
return new ProductA2();
}
AbstractProductB createProductB() {
return new ProductB2();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 간단 한 공장 모델 에 반사단순 공장 가 반 사 는 OCP 원칙 의 좋 은 구현 이다.인터넷 에는 이미 많은 예 가 있 지만 이런 물건 은 자신 이 하나의 예 를 생각해 내야 만 자신의 것 이 라 고 할 수 있다. 아래 코드 중 하 나 는 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.