기술나눔

조조의 오색 체스 형성 - 팩토리 메소드 패턴

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

시 설정

"군인은 일정한 추진력이 없고, 물은 일정한 모양이 없습니다. 적의 변화로 승리할 수 있는 자를 신이라고 합니다."

삼국시대의 전장에서는 전술이 체스 같았고 진형이 그림 같았습니다. 조조의 오색 체스 구성은 오늘날 소프트웨어 설계의 공장 방식 모델을 완벽하게 반영하지 않습니까? 팩토리 메소드 패턴의 미스터리를 밝혀내기 위해 이 마법 같은 형성 방법을 사용해 보자.

5색 깃발은 군대를 대형으로 나누어,
8개의 황금 자물쇠를 마음대로 사용할 수 있습니다.
팩토리 메소드는 군단을 생성하고,
유연하게 대처하고 미래를 바꾸세요.

5가지 색상의 체스 형성

건안 13년, 조조와 마초가 위남(魏南)에서 교착상태에 빠졌다. 마조는 용감하고 전투에 능했지만 조의 군대는 연패를 당했다. 어느 날, 조조는 텐트에 혼자 앉아 모래판을 바라보며 곰곰이 생각했습니다.

"군주님, 좋은 생각이 있으신가요?" 군사고문 Xun You가 물었습니다.

조조는 눈을 반짝이며 천천히 고개를 들었다. "나는 '오색 체스 진형'이라는 진형을 생각했습니다. 이 진형은 다섯 부분으로 나누어져 있으며, 오행의 상호 생성과 상호 구속의 원리에 따라 배열되었습니다. ."

Xun You는 호기심을 갖고 말했습니다. "주님, 분명히 해 주십시오."

조조는 오색 체스 말을 꺼내서 모래 탁자 위에 배열했습니다. "금, 나무, 물, 불, 흙, 다섯 가지 요소는 서로 보완적입니다. 각 색의 체스 말은 군대의 유형을 나타내며 적군이 보는 것은 항상 변화하는 진형이지만, 그 신비를 알아내기는 어렵습니다.”

Xun You는 갑자기 깨달았습니다. "정말 훌륭합니다! 이 5개 무기는 언제든지 필요한 군대를 생산할 수 있는 5개 공장과 같습니다."

조조는 고개를 끄덕였다. "그렇습니다. 금은 살생을 담당하고, 나무는 성장을 담당하고, 물은 지혜를, 불은 힘을, 땅은 방어를 담당합니다. 전투에 직면하면 변화에 적응하고 상황에 적응할 수 있습니다. 적의 상태."

다음날 조조는 오색 체스판을 펼쳤다. 마조는 군대를 이끌고 공격했지만, 조나라 군대의 진형이 예측할 수 없고 공격도 할 수 없고 방어도 할 수 없음을 보고 결국 패배하고 돌아왔다.

팩토리 메소드 패턴 분석

팩토리 메소드 패턴은 객체 생성을 위한 인터페이스를 정의하지만 인스턴스화할 클래스를 결정하는 것은 하위 클래스에 달려 있습니다. 팩토리 메소드를 사용하면 클래스가 인스턴스화를 하위 클래스로 연기할 수 있습니다.

Cao Cao의 5색 체스 구성은 공장 방식 모델과 유사합니다.

  • 다섯 가지 색상의 체스 말은 다섯 가지 팩토리 메소드와 동일합니다.
  • 공장에서 다양한 제품을 생산할 수 있는 것처럼 각 색상은 다양한 유형의 군대를 생산할 수 있습니다.
  • 전투 상황에 따라 사용할 체스 말의 색상을 선택하는 것은 필요에 따라 사용할 팩토리 방법을 선택하는 것과 같습니다.

클래스 다이어그램을 사용하여 팩토리 메소드 패턴의 구조를 이해해 보겠습니다.

이미지-20240707223228199

암호

Java를 사용하여 이 5색 체스 레이아웃 시스템을 구현해 보겠습니다.

// 军队单位接口
interface Unit {
    void attack();
    void defend();
}

// 军队工厂接口
interface ArmyFactory {
    Unit createUnit();
}

// 具体军队单位
class Cavalry implements Unit {
    public void attack() { System.out.println("骑兵发起冲锋!"); }
    public void defend() { System.out.println("骑兵列阵防守!"); }
}

class Archer implements Unit {
    public void attack() { System.out.println("弓箭手放箭!"); }
    public void defend() { System.out.println("弓箭手设防!"); }
}

class Scout implements Unit {
    public void attack() { System.out.println("斥候发动偷袭!"); }
    public void defend() { System.out.println("斥候隐蔽!"); }
}

class Infantry implements Unit {
    public void attack() { System.out.println("步兵发起进攻!"); }
    public void defend() { System.out.println("步兵筑起盾墙!"); }
}

class Guardian implements Unit {
    public void attack() { System.out.println("守卫进行反击!"); }
    public void defend() { System.out.println("守卫加强防御!"); }
}

// 具体军队工厂
class GoldArmyFactory implements ArmyFactory {
    public Unit createUnit() { return new Cavalry(); }
}

class WoodArmyFactory implements ArmyFactory {
    public Unit createUnit() { return new Archer(); }
}

class WaterArmyFactory implements ArmyFactory {
    public Unit createUnit() { return new Scout(); }
}

class FireArmyFactory implements ArmyFactory {
    public Unit createUnit() { return new Infantry(); }
}

class EarthArmyFactory implements ArmyFactory {
    public Unit createUnit() { return new Guardian(); }
}

// 曹操的五色棋布阵
class FiveColorChessFormation {
    private ArmyFactory[] factories;

    public FiveColorChessFormation() {
        factories = new ArmyFactory[] {
            new GoldArmyFactory(),
            new WoodArmyFactory(),
            new WaterArmyFactory(),
            new FireArmyFactory(),
            new EarthArmyFactory()
        };
    }

    public void deployTroops() {
        System.out.println("曹操:部署五色棋布阵!");
        for (ArmyFactory factory : factories) {
            Unit unit = factory.createUnit();
            unit.attack();
            unit.defend();
        }
    }
}

// 主类
public class FactoryMethodPatternDemo {
    public static void main(String[] args) {
        FiveColorChessFormation caoCaoFormation = new FiveColorChessFormation();
        caoCaoFormation.deployTroops();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89

작업 결과

曹操:部署五色棋布阵!
骑兵发起冲锋!
骑兵列阵防守!
弓箭手放箭!
弓箭手设防!
斥候发动偷袭!
斥候隐蔽!
步兵发起进攻!
步兵筑起盾墙!
守卫进行反击!
守卫加强防御!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

팩토리 메소드 패턴의 놀라운 활용

Cao Cao의 5색 체스 형성을 통해 우리는 팩토리 메소드 패턴의 몇 가지 주요 이점을 확인할 수 있습니다.

  1. 유연성: 전투상황에 따라 다양한 종류의 부대를 유연하게 생성할 수 있습니다.
  2. 확장성: 새로운 유닛을 추가해야 하는 경우 기존 코드 수정 없이 특정 공장, 특정 제품 카테고리만 새로 추가하면 됩니다.
  3. 디커플링: 특정 군부대 생성 로직과 사용 로직을 분리하여 코드의 유지보수성을 향상시켰습니다.
  4. 개방-폐쇄 원칙을 따르세요: 기존 코드 수정 없이 새로운 부대 유형을 도입할 수 있습니다.

결론

조조의 오색 체스 포메이션은 그의 탁월한 군사적 재능을 보여줄 뿐만 아니라 공장 방식 모델의 본질을 우리에게 드러냅니다. 소프트웨어 개발에서 팩토리 메소드 패턴은 프레임워크 설계, 플러그인 시스템, 구성 가능한 애플리케이션 등 다양한 분야에서 널리 사용됩니다.

조조가 전투 상황에 따라 다양한 무기를 유연하게 파견할 수 있었던 것처럼, 우리의 소프트웨어 시스템도 팩토리 메소드 패턴을 통해 객체 생성에 있어서 유연성과 확장성을 얻을 수 있습니다. 이 디자인 패턴을 마스터함으로써 우리는 소프트웨어 아키텍처의 전쟁터에서 무적 상태를 유지할 수 있으며 끊임없이 변화하는 변화에 대응하여 변하지 않을 수 있습니다.

참고 원문:https://offernow.cn
AI 학습 보조자:https://aistar.cool