찾다

 >  Q&A  >  본문

java - 【求喷系列】谁能普及下工厂模式的实际应用?我认为根本用不到?

放假无聊在家看设计模式《head first系列》,今天看了工厂模式,分为三种:

  1. 简单工厂模式

  2. 工厂模式

  3. 抽象工厂模式

首先这3个奇葩的名字,我真是醉了,虽说干了很多年,但是真还没怎么用过,这些东西都是各类框架实现的技术,比如spring,jdbc以及log4j之类的,真实的业务场景我还真没咋用过,谁帮忙普及下。
别整网上那些没营养的例子,什么汽车啊,鸭子啊,披萨啊,真是无聊,难道都不是用数据库表存各种属性吗?非要建立出那么多类,可能是想帮助人理解吧,但实际业务场景压根没有啊,谁说出来我服谁?求喷!

我后续还有若干求喷文,希望大家踊跃的喷我~

怪我咯怪我咯2803일 전826

모든 응답(4)나는 대답할 것이다

  • 迷茫

    迷茫2017-04-17 17:37:54

    이것이 비즈니스에서는 사용되지 않는다고 말한 것은 이해할 수 있습니다. 또한 UUID 객체와 같이 클래스 이름이 Factory인 것만이 팩토리라고 생각하지 마십시오. 현재 UUID에는 4가지 버전이 있지만 어느 것도 인스턴스화되지 않습니다. 이는 다양한 버전의 UUID를 통해 인스턴스화됩니다. 이 디자인의 이유는 일반적으로 그룹화 및 추상화 후 유사한 인터페이스 클래스를 생성하는 문제를 해결하기 위한 것입니다. 문자세트 인코딩

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:37:54

    수년 동안 일했지만 아직 누군가를 만나지 못한다면 비극이 될 것입니다. 우선 대기업으로 이직하여 누군가를 만나게 될 것입니다.
    가장 간단한 팩토리 모드는 관계형/비관계형 데이터베이스 전환, 버전 전환, 클래스 라이브러리 전환입니다. 잠깐, 아직까지 이런 일이 발생하지 않은 이유는 사후 유지 관리가 필요 없거나 버전 반복이나 데이터베이스 업데이트를 고려할 필요가 없기 때문이겠죠?

    다른 디자인 패턴에도 고유한 기능이 있습니다. 이 항목을 만나지 않으면 이 항목이 클래스 캡슐화를 사용하기 쉽다고 느낄 것입니다. 상속과 다형성은 매우 교묘하게 이루어졌습니다.

    게다가 프로그래머의 발전은 프레임워크 소스 코드, 언어 소스 코드, 대규모 동시성 및 코드 유지 관리성을 연구하는 것입니다.

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-17 17:37:54

    jdk의 예를 들어보겠습니다. Executors 클래스에는 newFixedThreadPool이라는 정적 메서드가 있습니다.

    으아악

    보시다시피 두 번째 매개변수는 스레드 팩토리에 전달될 수 있으며, 그러면 Executors 클래스는 팩토리 메소드를 기반으로 스레드 풀에 필요한 스레드를 생성할 수 있습니다. 즉, ThreadFactory에서 스레드를 생성하기 위한 모든 규칙을 작성할 수 있습니다. 예를 들어, 공장에서 생성된 스레드 이름에 XXX 접두사가 붙도록 하거나 스레드 우선순위 등을 지정합니다.

    팩토리 패턴의 가장 일반적인 시나리오라고 할 수 있으며, 다양한 프레임워크에서 널리 사용됩니다. 책을 읽으면서 디자인 패턴을 배우고 실제 코드를 더 많이 읽어보면 패턴의 구체적인 기능은 물론 다양한 기발한 기법까지 자연스럽게 발견하게 될 것입니다.

    회신하다
    0
  • 黄舟

    黄舟2017-04-17 17:37:54

    팩토리 패턴이든 다른 생성 패턴이든 모두 개체를 초기화하는 하나의 목적을 가지고 있습니다. 즉, 데이터 구조 모델을 구축하기 위해(클래스와 객체 자체가 사용자 정의 데이터 구조입니다).

    그렇다면 왜 이런 방식으로 객체를 생성하고 디자인 패턴을 사용할 수 있는지에 대한 질문이 생깁니다. 본질적으로 그 이유는 상위 사용자가 객체를 초기화하기 위해 new를 직접 사용하는 것을 원하지 않기 때문입니다. new

    이에는 여러 가지 이유가 있는데, 그 중 대부분은

    상위 사용자로부터 개체 생성 프로세스를 분리하거나 사용자가 익히기 어려운 개체 생성 프로세스입니다 ; 또는 객체 생성은 특정 조건 을 충족해야 합니다. 이러한 조건은 비즈니스 요구 사항일 수도 있고 시스템 제약 사항일 수도 있습니다.

    그러므로 이제 우리는 위의 동지들이 언급한 공장 모드인지 개폐 원리인지 명확해야 합니다. 이러한 복잡한 프로세스가 외부 세계에 노출되지 않도록 일부 복잡한 프로세스를 격리하는 것입니다. 노출되면 이러한 프로세스는 사용자에게 팀워크라고 불리는 문제를 추가합니다.

    객체지향 캡슐화 자체가 외부

    를 최대한 단순하게 만드는 것입니다. API

    예를 들어

    필드를 정의했지만 일부 비즈니스상의 이유로 이 필드는 상태를 나타내기 위해 정수를 사용해야 합니다. 뭐, 숫자가 적으면 처리하기 쉬우니까요. 숫자가 많으면 상위 사용자는 각 숫자가 나타내는 상태를 명확하게 기억하지 못할 수도 있습니다. (예를 들어 음성 통신 시스템을 만들려는 경우, 그러면 음성 장비에는 많은 상태 번호가 있습니다). 이때 Status를 이용하여 객체를 생성한 뒤 new에 값을 할당하게 되면, 필연적으로 개발 문서를 참고해야 하거나, 실수로 잘못된 값을 부여할 수도 있습니다. 이때 팩토리 패턴이나 기타 적합한 디자인 패턴을 사용하여 코드를 구성할 수 있습니다. Status

    예를 들면 다음과 같습니다.

    으아아아

    물론 열거형을 사용할 수도 있습니다. 직설적으로 말하면 디자이너의 의지에 달려있습니다.

    그래서 디자인 패턴은 어떤 시나리오에 사용해야 하는지를 말하지 않습니다. 더 정확하게 말하면 디자인 패턴을 사용할 때 팀원에게 편의성을 가져다 줄 수 있는지, 아니면 코드 품질을 향상시킬 수 있는지, 오류를 피하세요? 그렇다면 그것을 사용하십시오. 복잡함만 가져오고 아무런 이점도 없다면 잊어버리십시오.

    한마디로 사용할 필요도 없고, 사용할 필요도 없습니다. 사용하면 팀, 제품 품질, 제품 유지 관리성 측면에서 이점을 얻을 수 있습니다. 사용하든 안하든 팀워크와 제품 지향적이어야 합니다. 이는 소프트웨어 디자이너의 기본 요구 사항입니다.

    회신하다
    0
  • 취소회신하다