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();