main
syeffort 2 years ago
parent b3b784113f
commit 56857c00d2
  1. 9
      DesignPatternGuru/DesignPatternGuru.sln
  2. 37
      DesignPatternGuru/Iterator/Collections/WordsCollection.cs
  3. 10
      DesignPatternGuru/Iterator/Iterator.csproj
  4. 54
      DesignPatternGuru/Iterator/Iterators/AlphabeticalOrderIterator.cs
  5. 22
      DesignPatternGuru/Iterator/Iterators/Iterator.cs
  6. 14
      DesignPatternGuru/Iterator/Iterators/IteratorAggregate.cs
  7. 30
      DesignPatternGuru/Iterator/Program.cs

@ -35,7 +35,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BehavioralPatterns", "Behav
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ChainOfResponsibility", "ChainOfResponsibility\ChainOfResponsibility.csproj", "{9626EF73-1F68-46C8-B7C1-434F02768452}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Command", "Command\Command.csproj", "{629A51B1-04D9-4636-8E21-1712DCFF21DF}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Command", "Command\Command.csproj", "{629A51B1-04D9-4636-8E21-1712DCFF21DF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Iterator", "Iterator\Iterator.csproj", "{6619433E-476B-404C-94A0-D0C0FE52DE41}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -99,6 +101,10 @@ Global
{629A51B1-04D9-4636-8E21-1712DCFF21DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{629A51B1-04D9-4636-8E21-1712DCFF21DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{629A51B1-04D9-4636-8E21-1712DCFF21DF}.Release|Any CPU.Build.0 = Release|Any CPU
{6619433E-476B-404C-94A0-D0C0FE52DE41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6619433E-476B-404C-94A0-D0C0FE52DE41}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6619433E-476B-404C-94A0-D0C0FE52DE41}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6619433E-476B-404C-94A0-D0C0FE52DE41}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -118,6 +124,7 @@ Global
{F0E63700-B550-4D57-B912-18C28B3FEAC6} = {0B9333EC-FB73-4FEE-B600-9ECCD5A356B1}
{9626EF73-1F68-46C8-B7C1-434F02768452} = {E3B8A482-1A9A-4B6E-8310-050A44C8E379}
{629A51B1-04D9-4636-8E21-1712DCFF21DF} = {E3B8A482-1A9A-4B6E-8310-050A44C8E379}
{6619433E-476B-404C-94A0-D0C0FE52DE41} = {E3B8A482-1A9A-4B6E-8310-050A44C8E379}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {3E5A9C6B-2E8A-466E-B5E0-4379902EFFAC}

@ -0,0 +1,37 @@
using Iterator.Iterators;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Iterator.Collections
{
internal class WordsCollection : IteratorAggregate
{
List<string> _collection = new List<string>();
bool _direction = false;
public void ReverseDirection()
{
_direction = !_direction;
}
public List<string> GetItems()
{
return _collection;
}
public void AddItem(string item)
{
_collection.Add(item);
}
public override IEnumerator GetEnumerator()
{
return new AlphabeticalOrderIterator(this, _direction);
}
}
}

@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

@ -0,0 +1,54 @@
using Iterator.Collections;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Iterator.Iterators
{
internal class AlphabeticalOrderIterator : Iterator
{
private WordsCollection _collection;
private int _position = -1;
private bool _reverse = false;
public AlphabeticalOrderIterator(WordsCollection collection, bool reverse = false)
{
_collection = collection;
_reverse = reverse;
if (_reverse)
{
_position = collection.GetItems().Count;
}
}
public override object Current()
{
return _collection.GetItems()[_position];
}
public override int Key()
{
return _position;
}
public override bool MoveNext()
{
int updatedPosition = _position + (_reverse ? -1: 1);
if (updatedPosition < 0 || updatedPosition >= _collection.GetItems().Count)
return false;
_position = updatedPosition;
return true;
}
public override void Reset()
{
_position = _reverse ? _collection.GetItems().Count - 1 : 0;
}
}
}

@ -0,0 +1,22 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Iterator.Iterators
{
abstract class Iterator : IEnumerator
{
object IEnumerator.Current => Current();
public abstract int Key();
public abstract object Current();
public abstract bool MoveNext();
public abstract void Reset();
}
}

@ -0,0 +1,14 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Iterator.Iterators
{
abstract class IteratorAggregate : IEnumerable
{
public abstract IEnumerator GetEnumerator();
}
}

@ -0,0 +1,30 @@
using Iterator.Collections;
namespace Iterator
{
internal class Program
{
static void Main(string[] args)
{
WordsCollection collection = new WordsCollection();
collection.AddItem("First");
collection.AddItem("Second");
collection.AddItem("Third");
Console.WriteLine("Straight traversal: ");
foreach (var element in collection)
{
Console.WriteLine(element);
}
Console.WriteLine();
Console.WriteLine("Reverse traversal: ");
collection.ReverseDirection();
foreach (var element in collection)
{
Console.WriteLine(element);
}
}
}
}
Loading…
Cancel
Save