Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class NutritionFacts
- {
- public static NutritionFacts.Builder Build(string name, int servingSize, int servingsPerContainer)
- {
- return new NutritionFacts.Builder(name, servingSize, servingsPerContainer);
- }
- public sealed class Builder
- {
- public Builder(String name, int servingSize,
- int servingsPerContainer)
- {
- }
- public Builder totalFat(int val) { }
- public Builder saturatedFat(int val) { }
- public Builder transFat(int val) { }
- public Builder cholesterol(int val) { }
- //... 15 more setters
- public NutritionFacts build()
- {
- return new NutritionFacts(this);
- }
- }
- private NutritionFacts(Builder builder) { }
- protected NutritionFacts() { }
- }
- public class MoreNutritionFacts : NutritionFacts
- {
- public new static MoreNutritionFacts.Builder Build(string name, int servingSize, int servingsPerContainer)
- {
- return new MoreNutritionFacts.Builder(name, servingSize, servingsPerContainer);
- }
- public new sealed class Builder
- {
- public Builder(String name, int servingSize,
- int servingsPerContainer) {}
- public Builder totalFat(int val) { }
- public Builder saturatedFat(int val) { }
- public Builder transFat(int val) { }
- public Builder cholesterol(int val) { }
- //... 15 more setters
- public Builder newProperty(int val) { }
- public MoreNutritionFacts build()
- {
- return new MoreNutritionFacts(this);
- }
- }
- private MoreNutritionFacts(MoreNutritionFacts.Builder builder) { }
- }
- public class CustomerBuilder
- {
- ......
- public static implicit operator Customer( CustomerBuilder builder )
- {
- return builder.Build();
- }
- }
- public sealed class SomeMessage
- {
- public string Name { get; private set; }
- public int Age { get; private set; }
- // Can only be called in this class and nested types
- private SomeMessage() {}
- public sealed class Builder
- {
- private SomeMessage message = new SomeMessage();
- public string Name
- {
- get { return message.Name; }
- set { message.Name = value; }
- }
- public int Age
- {
- get { return message.Age; }
- set { message.Age = value; }
- }
- public SomeMessage Build()
- {
- // Check for optional fields etc here
- SomeMessage ret = message;
- message = null; // Builder is invalid after this
- return ret;
- }
- }
- }
- public interface IFactory<T>
- {
- T Create();
- }
- public interface IBuilder<T> : IFactory<T>
- {
- bool HasInstance { get; }
- T Instance { get; }
- void ClearInstance();
- }
- public abstract class Builder<T> : IBuilder<T>
- {
- public static implicit operator T(Builder<T> builder)
- {
- return builder.Instance;
- }
- T _instance;
- public abstract T Create();
- public bool HasInstance { get; private set; }
- public T Instance
- {
- get
- {
- if(!this.HasInstance)
- {
- _instance = Create();
- this.HasInstance = true;
- }
- return _instance;
- }
- }
- public void ClearInstance()
- {
- this.HasInstance = false;
- _instance = default(T);
- }
- }
- public class Order
- {
- public string ReferenceNumber { get; private set; }
- public DateTime? ApprovedDateTime { get; private set; }
- public void Approve()
- {
- this.ApprovedDateTime = DateTime.Now;
- }
- }
- public Order(string referenceNumber)
- {
- // ... validate ...
- this.ReferenceNumber = referenceNumber;
- }
- internal Order(string referenceNumber, DateTime? approvedDateTime)
- {
- this.ReferenceNumber = referenceNumber;
- this.ApprovedDateTime = approvedDateTime;
- }
- public class OrderBuilder : Builder<Order>
- {
- string _referenceNumber;
- DateTime? _approvedDateTime;
- public override Order Create()
- {
- return new Order(_referenceNumber, _approvedDateTime);
- }
- public string ReferenceNumber
- {
- get { return _referenceNumber; }
- set
- {
- if(value != _referenceNumber)
- {
- _referenceNumber = value;
- ClearInstance();
- }
- }
- }
- public DateTime? ApprovedDateTime
- {
- get { return _approvedDateTime; }
- set
- {
- if(value != _approvedDateTime)
- {
- _approvedDateTime = value;
- ClearInstance();
- }
- }
- }
- }
- Order order = new OrderBuilder
- {
- ReferenceNumber = "ABC123",
- ApprovedDateTime = new DateTime(2008, 11, 25)
- };
- public class NutritionFacts
- {
- public int servingSize { get; private set; }
- public int servings { get; private set; }
- public int calories { get; private set; }
- public int fat { get; private set; }
- public int carbohydrate { get; private set; }
- public int sodium { get; private set; }
- public NutritionFacts(int servingSize, int servings, int calories = 0, int fat = 0, int carbohydrate = 0, int sodium = 0)
- {
- this.servingSize = servingSize;
- this.servings = servings;
- this.calories = calories;
- this.fat = fat;
- this.carbohydrate = carbohydrate;
- this.sodium = sodium;
- }
- }
- NutritionFacts nf2 = new NutritionFacts(240, 2, calories: 100, fat: 40);
Add Comment
Please, Sign In to add comment