So I have been learning C# lately and trying to apply some concepts from Joshua Bloch's Effective Java 2.
The builder pattern.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PaymentLibrary
{
public sealed class CardType
{
public string Id { get; private set; }
public string Name { get; private set; }
public string IssueFlag { get; private set; }
public IList<int> Lengths { get; private set; }
public IList<string> Prefixes { get; private set; }
private CardType()
{
}
public sealed class Builder
{
private string id;
private string name;
private string issueFlag;
private IList<int> lengths = new List<int>();
private IList<string> prefixes = new List<string>();
public Builder WithId(string id)
{
this.id = id;
return this;
}
public Builder WithName(string name)
{
this.name = name;
return this;
}
public Builder WithLength(int length)
{
this.lengths.Add(length);
return this;
}
public Builder WithIssueFlag(string issueFlag)
{
this.issueFlag = issueFlag;
return this;
}
public Builder WithPrefix(string prefix)
{
this.prefixes.Add(prefix);
return this;
}
public CardType Build()
{
CardType cardType = new CardType();
cardType.Id = id;
cardType.Name = name;
cardType.IssueFlag = issueFlag;
cardType.Lengths = lengths;
cardType.Prefixes = prefixes;
return cardType;
}
}
}
}
Usage:
CardType cardType = new CardType.Builder()
.WithId("MC")
.WithName("Mastercard")
.WithIssueFlag("N")
.WithPrefix("49")
.WithPrefix("56")
.WithLength(16)
.WithLength(18)
.WithLength(19)
.Build();