0의 자율 학습 C#09-추상 팩토리 패턴 예

黄舟
풀어 주다: 2017-02-04 10:52:46
원래의
1626명이 탐색했습니다.

1. 적용 환경

(주로 다중 제품, 다중 스킨을 갖는 소프트웨어, 다중 데이터베이스 등의 생산 및 제조에 사용됨)

  • 시스템 모든 유형의 팩토리 패턴에 중요한 제품 클래스 인스턴스가 생성, 구성 및 표현되는 방법에 대한 세부 정보에 의존해서는 안 됩니다.

  • 시스템에는 두 개 이상의 제품군이 있으며, 한 번에 하나의 제품군만 사용됩니다.

  • 같은 제품군에 속하는 제품들은 함께 사용하게 되는데, 이러한 제약이 시스템 설계에 반영되어야 합니다.

  • 시스템은 제품 클래스 라이브러리를 제공하며 모든 제품은 동일한 인터페이스로 나타나므로 클라이언트가 특정 구현에 의존하지 않습니다.

2. 패턴 정의

추상 팩토리 패턴: 특정 클래스를 지정하지 않고 일련의 관련되거나 상호 의존적인 개체를 생성하기 위한 인터페이스를 제공합니다. 키트 패턴이라고도 알려진 추상 팩토리 패턴은 객체 생성 패턴입니다.

3. 패턴 구조

추상 팩토리 패턴에는 다음 역할이 포함됩니다.

  • AbstractFactory: Abstract Factory

  • ConcreteFactory: 콘크리트 공장

  • AbstractProduct: 추상 제품

  • Product: 콘크리트 제품

팩토리 메소드 패턴을 더 명확하게 이해하려면 두 가지 개념을 먼저 소개해야 합니다.

  • 제품 계층 구조: 제품 계층 구조는 제품의 상속 구조입니다. 클래스는 텔레비전이고 그 하위 카테고리에는 Haier TV, Hisense TV 및 TCL TV가 포함됩니다. 추상 TV와 TV의 특정 브랜드 사이에 제품 계층 구조가 형성됩니다. TV의 하위 카테고리입니다.

  • 제품군: 추상적 공장 모델에서 제품군은 동일한 공장에서 생산되고 서로 다른 제품 계층에 위치한 제품 그룹을 의미합니다(예: Haier Electrical Appliances에서 생산한 Haier 제품). 공장 TV와 하이얼 냉장고는 TV 제품 계층에 위치하고 하이얼 냉장고는 냉장고 제품 계층에 위치합니다.

0의 자율 학습 C#09-추상 팩토리 패턴 예

4. 코드

프로세스 인터페이스

interface IFlow
    {
        IRxAlign CreateRxAlign();

        IDispensing CreateDispensing();
    }

class FlowA : IFlow
    {        public IRxAlign CreateRxAlign()
        {            return new RxAlignA();
        }        public IDispensing CreateDispensing()
        {            return new DispensingA();
        }
    }


class FlowB : IFlow
    {        public IRxAlign CreateRxAlign()
        {            return new RxAlignB();
        }        public IDispensing CreateDispensing()
        {            return new DispensingB();
        }
    }
로그인 후 복사

커플링 인터페이스

interface IRxAlign
    { 
        event LocationChange LocChange;        
int[] RoPulse { set; get; }        
int[] FiPulse { set; get; }        
int[] RoMaxStep { set; get; }        
double[] RoRESTarget { set; get; }        
double[] TxP { set; get; }        
double[] RESmin { set; get; }        
double[] RESmax { set; get; }

        Coordinate Location { set; get; }        
void LoadPara(string PN);        
void GoHome();        
void Start();        
void Stop();
    }

class RxAlignA : IRxAlign
    {        private ControlCard card;        
private QSFP28 product;        
private double RESmax, RESmin, RES;        
private double[] TxPower;        
public RxAlignA()
        {            
this.RESmax = 1.0;            
this.RESmin = 0.4;
        }        
public bool ConfigPara()
        {            
try
            {                
this.card = new ControlCard();                
this.product = new QSFP28();               
 return true;
            }            catch
            {                return false;
            }
        }        public void GoHome()
        {            //QSFP28 go home
        }        public void Start()
        {            //QSFP28 start
        }        public void Stop()
        {
            card = null;
            product = null;
        }
        ...
    }

class RxAlignB : IRxAlign
    {        private ControlCard card;        
 private CFP4 product;        
 private double RESmax, RESmin, RES;        
 private double[] TxPower;        
 public RxAlignB()
        {            this.RESmax = 1.0;            
 this.RESmin = 0.4;
        }        public bool ConfigPara()
        {            try
            {                this.card = new ControlCard();                
 this.product = new CFP4();                
 return true;
            }            catch
            {                return false;
            }
        }        public void GoHome()
        {            //CFP4 go home
        }        public void Start()
        {            //CFP4 start
        }        public void Stop()
        {
            card = null;
            product = null;
        }
        ...
    }
로그인 후 복사

접착제 도포 인터페이스

interface IDispensing
    {
        //code
    }class DispensingA : IDispensing
    {
        //code
    }class DispensingB : IDispensing
    {
        //code
    }
로그인 후 복사

메인 스레드 호출

flow = new FlowA();
align = flow.CreateRxAlign();
align.LoadPara(this.comboBoxPN.Text);

dispens = flow.CreateDispensing();
dispens.//code...
로그인 후 복사

위는 0--Abstract Factory Pattern 예제의 자율 학습 C#09 내용입니다. 더 많은 관련 내용을 보려면 PHP를 참고하세요. 중국사이트(www.php.cn)!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!