Created
December 25, 2018 12:07
-
-
Save changhengliou/89529aa2e1c915388c169b3234d29406 to your computer and use it in GitHub Desktop.
design pattern
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ----------- adapter pattern ------------------- | |
| public class TargetA | |
| { | |
| public void Start() { ... } | |
| public void End() { ... } | |
| } | |
| public class TargetB | |
| { | |
| public void Begin() { ... } | |
| public void Terminate() { ... } | |
| } | |
| public interface ITargetAdapter | |
| { | |
| void Open(); | |
| void Close(); | |
| } | |
| public class AdapterA : ITargetAdapter | |
| { | |
| private TargetA A { get; set; } | |
| public AdapterA( TargetA a ) | |
| { | |
| this.A = a; | |
| } | |
| public void Open() { this.A.Start(); } | |
| public void Close() { this.A.End(); } | |
| } | |
| public class AdapterB : ITargetAdapter | |
| { | |
| private TargetB B { get; set; } | |
| public AdapterB( TargetB a ) | |
| { | |
| this.B = a; | |
| } | |
| public void Open() { this.B.Begin(); } | |
| public void Close() { this.B.Terminate(); } | |
| } | |
| ITargetAdapter adapter = new AdapterA( new TargetA() ); | |
| adapter.Open(); | |
| adapter.Close(); | |
| // ------------- Singleton ------------------- | |
| class Singleton | |
| { | |
| private static Singleton _instance; | |
| private static object _lock = new object(); | |
| private Singleton() | |
| { | |
| } | |
| public static Singleton Instance() | |
| { | |
| lock(_lock) { | |
| if (_instance == null) | |
| { | |
| _instance = new Singleton(); | |
| } | |
| } | |
| return _instance; | |
| } | |
| } | |
| // ------------ Proxy --------------------- | |
| public class Ops | |
| { | |
| public virtual Result Transaction() | |
| { | |
| Console.WriteLine("Transaction done."); | |
| return result; | |
| } | |
| } | |
| public class RpcOps : Ops | |
| { | |
| public override void Transaction() | |
| { | |
| using (TcpClient client = new TcpClient()) | |
| { | |
| // perform remote procedure call | |
| } | |
| return result; | |
| } | |
| } | |
| // -------------- Decorator ------------------- | |
| public abstract class BasePizza | |
| { | |
| protected double myPrice; | |
| public virtual double GetPrice() | |
| { | |
| return this.myPrice; | |
| } | |
| } | |
| public abstract class ToppingsDecorator : BasePizza | |
| { | |
| protected BasePizza pizza; | |
| public ToppingsDecorator(BasePizza pizzaToDecorate) | |
| { | |
| this.pizza = pizzaToDecorate; | |
| } | |
| public override double GetPrice() | |
| { | |
| return (this.pizza.GetPrice() + this.myPrice); | |
| } | |
| } | |
| class Program | |
| { | |
| static void Main() | |
| { | |
| Margherita pizza = new Margherita(); | |
| Console.WriteLine("Plain Margherita: " + pizza.GetPrice().ToString()); | |
| ExtraCheeseTopping moreCheese = new ExtraCheeseTopping(pizza); | |
| ExtraCheeseTopping someMoreCheese = new ExtraCheeseTopping(moreCheese); | |
| Console.WriteLine("Plain Margherita with double extra cheese: " + someMoreCheese.GetPrice().ToString()); | |
| MushroomTopping moreMushroom = new MushroomTopping(someMoreCheese); | |
| Console.WriteLine("Plain Margherita with double extra cheese with mushroom: " + moreMushroom.GetPrice().ToString()); | |
| JalapenoTopping moreJalapeno = new JalapenoTopping(moreMushroom); | |
| Console.WriteLine("Plain Margherita with double extra cheese with mushroom with Jalapeno: " + moreJalapeno.GetPrice().ToString()); | |
| Console.ReadLine(); | |
| } | |
| } | |
| public class Margherita : BasePizza | |
| { | |
| public Margherita() | |
| { | |
| this.myPrice = 6.99; | |
| } | |
| } | |
| public class Gourmet : BasePizza | |
| { | |
| public Gourmet() | |
| { | |
| this.myPrice = 7.49; | |
| } | |
| } | |
| public class ExtraCheeseTopping : ToppingsDecorator | |
| { | |
| public ExtraCheeseTopping(BasePizza pizzaToDecorate) | |
| : base(pizzaToDecorate) | |
| { | |
| this.myPrice = 0.99; | |
| } | |
| } | |
| public class MushroomTopping : ToppingsDecorator | |
| { | |
| public MushroomTopping(BasePizza pizzaToDecorate) | |
| : base(pizzaToDecorate) | |
| { | |
| this.myPrice = 1.49; | |
| } | |
| } | |
| public class JalapenoTopping : ToppingsDecorator | |
| { | |
| public JalapenoTopping(BasePizza pizzaToDecorate) | |
| : base(pizzaToDecorate) | |
| { | |
| this.myPrice = 1.49; | |
| } | |
| } | |
| // -------------- Observable ------------------- | |
| // -------------- Factory ---------------------- |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment