C#의 예제를 사용한 디자인 패턴
[옵저버, 어댑터, 파사드, 싱글톤, 팩토리 방식, 브리지]
행동 패턴
관찰자
개체가 다른 개체에 상태 변경 사항을 알릴 수 있도록 합니다(게시자 및 구독자). 여기에서 사용할 수 있는 예제에 대한 자세한 정보https://docs.microsoft.com/en-us/dotnet/standard/events/observer-design-pattern
interface IObserver{
void Update(object update);
}
interface ISubject{
void Attach(IObserver observer);
void Detach(IObserver observer);
void Notify();
}
class Subject: ISubject{
private List<IObserver> _subjectObservers;
public Subject(){
_subjectObservers = new List<IObserver>();
}
void Attach(IObserver observer){
_subjectObservers.Add(observer);
}
void Detach(IObserver observer){
_subjectObservers.Remove(observer);
}
void Notify(){
foreach(var observer in _subjectObservers){
observer.Update("Some state");
}
}
/*
Some logic that calls to Notify when needed
*/
}
class ObserverA: IObserver{
void Update(object update){
}
}
class ObserverB: IObserver{
void Update(object update){
}
}
class SomeClass{
public void Init(){
var observerA = new ObserverA();
var observerB = new ObserverB();
var subject = new Subject();
subject.Attach(observerA);
}
}
구조적 패턴
어댑터
호환되지 않는 인터페이스가 함께 작동하도록 허용
class ToAdapt{
public int Calculate(int a, int b){
return a * b;
}
}
class IAdaptInterface{
public void CalculateWithLessParameters(int a);
}
class Adapter: ToAdapt, IAdaptInterface{
public int CalculateWithLessParameters(int a){
return Calculate(a, 10);
}
}
정면
복잡한 클래스, 라이브러리에 대한 단순화된 인터페이스 제공
public class MemoryCacheFacade
{
private MemoryCache _memoryCache;
public MemoryCacheFacade(MemoryCacheOptions memoryCacheOptions)
{
_memoryCache = new MemoryCache(memoryCacheOptions);
}
public void Set<TItem>(object key, TItem value)
{
_memoryCache.Set(key, value);
}
public bool TryGetValue<TItem>(object key, out TItem result)
{
if (_memoryCache.TryGetValue(key, out result))
{
return true;
}
return false;
}
public ICacheEntry CreateEntry(object key)
{
return _memoryCache.CreateEntry(key);
}
}
다리
브리지 디자인 패턴은 추상화에서 구현을 분리합니다. 새 소프트웨어가 이전 소프트웨어를 대체하지만 기존 코드베이스에 대해 둘 다 함께 실행되어야 하는 경우 버전 관리에 유용합니다.
class Abstraction{
Bridge _bridge;
public Abstraction(Bridge bridge){
_bridge = bridge;
}
public string Execute(){
_bridge.ExecuteSomeFunction();
}
}
interface IBridge{
void ExecuteSomeFunction();
}
class Version1: IBridge{
public void ExecuteSomeFunction(){
}
}
class Version2: IBridge{
public void ExecuteSomeFunction(){
}
}
static void Main(){
(new Abstraction(new Version1())).Execute();
(new Abstraction(new Version2())).Execute();
}
창작 패턴
하나씩 일어나는 것
디자인 패턴은 해당 유형의 객체가 하나만 존재하고 해당 객체에 대한 액세스 포인트가 있음을 보장합니다.
class Singleton{
private static Singleton singeltonInstance=null;
/*
Private constructor here is to prevent creation of
multiple instances of this class
*/
private Singleton()
{
}
public static Singleton SingletonInstance{
if(singeltonInstance == null){
singeltonInstance = new Singleton();
}
return singeltonInstance;
}
}
공장 방법
구체적인 클래스를 지정하지 않고 개체를 만들기 위한 인터페이스를 제공합니다.
interface IShip{
string Name();
}
class BigShip: IShip{
public string Name(){
return "Big ship";
}
}
class SmallShip: IShip{
public string Name(){
return "Small ship";
}
}
class Creator{
private bool _bigShipAvailable = true;
public IShip FactoryMethod(){
if(_bigShipAvailable){
_bigShipAvailable = false;
return new BigShip();
}else{
return new SmallShip();
}
}
}
Reference
이 문제에 관하여(C#의 예제를 사용한 디자인 패턴), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/genichm/design-patterns-with-examples-in-c-2588텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)