C# 디자인 패턴의 전략 패턴에 대한 심층적인 이해 및 역할별 사례 공유
Strategy Pattern
Strategy 패턴은 일련의 알고리즘을 정의하고 각 알고리즘을 결합하는 행동 패턴입니다. 이를 캡슐화하여 상호 교환 가능하게 만들고, 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있습니다.
전략 패턴을 사용하면 행동과 환경을 분리할 수 있습니다. 환경 클래스는 행위 클래스를 유지하고 조회하는 역할을 담당하며, 특정 전략 클래스에는 다양한 알고리즘이 제공된다.
역할:
1. 추상적인 전략(Strategy)
이는 추상적인 역할이며 일반적으로 다음으로 구성됩니다. 인터페이스 또는 추상 클래스 구현. 이 역할은 구체적인 전략 클래스에 필요한 모든 인터페이스를 제공합니다.
2. 구체적인 전략
알고리즘 또는 동작과 관련된 추상 전략 및 패키지를 구현하는 구체적인 전략 클래스입니다. #
3. 환경 클래스(Context) 은 Strategy 클래스에 대한 참조를 보유하고 로직을 기반으로 인스턴스에 해당하는 전략을 선택할 수 있습니다.예:
namespace StragetyPattern
public abstract class Tax { protected decimal TaxRate = 0; protected decimal QuickDeduction = 0; public virtual decimal Calculate(decimal income) { return income * TaxRate - QuickDeduction; } }
public class Level0 : Tax { public Level0() { TaxRate = 0.00m; QuickDeduction = 0; } }
public class Level1 : Tax { public Level1() { TaxRate = 0.03m; QuickDeduction = 0; } }
public class Level2 : Tax { public Level2() { TaxRate = 0.10m; QuickDeduction = 105; } }
public class Level3 : Tax { public Level3() { TaxRate = 0.20m; QuickDeduction = 555; } }
public class Level4 : Tax { public Level4() { TaxRate = 0.25m; QuickDeduction = 1005; } }
public class Level5 : Tax { public Level5() { TaxRate = 0.30m; QuickDeduction = 2755; } }
public class Level6 : Tax { public Level6() { TaxRate = 0.35m; QuickDeduction = 5505; } }
public class Level7 : Tax { public Level7() { TaxRate = 0.45m; QuickDeduction = 13505; } }
public class Context { private Tax _tax = null; private const decimal EXEMPTION_VALUE = 3500m; private List<decimal> _taxLevel = new List<decimal>{ 0, 1500, 4500, 9000, 35000, 55000, 80000, decimal.MaxValue }; private List<Type> _levels = new List<Type>(); private void GetLevels() { _levels = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(tp => tp.GetTypes() .Where(t => t.BaseType == typeof(Tax))) .ToList(); } public Context() { GetLevels(); } public Context Calculate(decimal income) { _tax = new Level0(); var result = income - EXEMPTION_VALUE; for(int i = 1; i <= _taxLevel.Count - 1; i++) { if(result > _taxLevel[i - 1] && result <= _taxLevel[i]) { _tax = (Tax)Activator.CreateInstance(_levels[i]); } } Console.WriteLine($"Income = {income}," + $"tax = {_tax.Calculate(result)}!"); return this; } }
public class Program { private static Context _context = new Context(); public static void Main(string[] args) { _context.Calculate(2500.00m) .Calculate(4900.00m) .Calculate(5500.00m) .Calculate(7000.00m) .Calculate(10000.00m) .Calculate(16000.00m) .Calculate(43000.00m) .Calculate(70000.00m) .Calculate(100000.00m) .Calculate(4500.00m) .Calculate(1986.00m); Console.ReadKey(); } }
Income = 2500.00,tax = 0.0000! Income = 4900.00,tax = 42.0000! Income = 5500.00,tax = 95.0000! Income = 7000.00,tax = 245.0000! Income = 10000.00,tax = 745.0000! Income = 16000.00,tax = 2120.0000! Income = 43000.00,tax = 9095.0000! Income = 70000.00,tax = 17770.0000! Income = 100000.00,tax = 29920.0000! Income = 4500.00,tax = 30.0000! Income = 1986.00,tax = 0.0000!
Advantages:
1. 전략 클래스의 계층 구조는 알고리즘 또는 동작을 정의합니다. family, 상속을 올바르게 사용하면 공통 코드를 상위 클래스로 이동할 수 있으므로 중복 코드를 피할 수 있습니다2 상속을 통해 다양한 알고리즘이나 동작을 처리할 수 있으며 여러 조건부 전송 문을 사용하지 않아도 됩니다.
단점:
1 클라이언트는 모든 정책 클래스를 알고 어떤 클래스를 사용할지 결정해야 합니다. 2. 전략 모델은 많은 전략 클래스를 생성하여 "하위 클래스 폭발"을 초래합니다.
사용 시나리오:
1. 시스템에 많은 클래스가 있고 클래스 간의 차이점은 동작에만 있는 경우 전략 패턴을 사용하면 객체가 여러 동작 중에서 하나의 동작을 동적으로 선택하도록 할 수 있습니다.2 시스템은 여러 알고리즘 중 하나를 동적으로 선택해야 합니다.
디자인 패턴이란 무엇입니까 - PHP 고급 디자인 패턴 비디오 튜토리얼
위 내용은 C# 디자인 패턴의 전략 패턴에 대한 심층적인 이해 및 역할별 사례 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











C#을 사용한 Active Directory 가이드. 여기에서는 소개와 구문 및 예제와 함께 C#에서 Active Directory가 작동하는 방식에 대해 설명합니다.

C#의 액세스 수정자에 대한 안내입니다. 예제 및 출력과 함께 C#의 액세스 한정자의 소개 유형에 대해 논의했습니다.

C#의 난수 생성기 가이드입니다. 여기서는 난수 생성기의 작동 방식, 의사 난수 및 보안 숫자의 개념에 대해 설명합니다.

C# 데이터 그리드 뷰 가이드. 여기서는 SQL 데이터베이스 또는 Excel 파일에서 데이터 그리드 보기를 로드하고 내보내는 방법에 대한 예를 설명합니다.

C# StringReader에 대한 안내입니다. 여기에서는 C# StringReader에 대한 간략한 개요와 다양한 예제 및 코드와 함께 작동하는 방법에 대해 설명합니다.

C# StringWriter 가이드. 여기에서는 C# StringWriter 클래스에 대한 간략한 개요와 다양한 예제 및 코드와 함께 작동하는 방법에 대해 설명합니다.
