Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. class IShapeProviderState {
  2. Shape GetShape(ShapeProvider provider);
  3. }
  4. class Square : Shape {
  5.  
  6. }
  7. class Rect : Shape {
  8.  
  9. }
  10. class SquareProvider : IShapeProvider {
  11. public void GetShape() {
  12. return new Square();
  13. }
  14. }
  15. class ShapeProviderShapesLeft : IShapeProviderState {
  16. public Shape GetShape(ShapeProvider provider) {
  17. provider.RemoveShape();
  18. return provider.CreateShape();
  19. }
  20. }
  21. class ShapeProviderShapesEnd : IShapeProviderState {
  22. public Shape GetShape(ShapeProvider provider) {
  23. throw new Exception("Figures ended");
  24. }
  25. }
  26.  
  27. class ShapeProvider {
  28. int shapesLeft = 10;
  29. public IShapeProviderState State;
  30. public IShapeProvider Provider {get;set;} //по клику ставим какой-либо провайдер
  31. public ShapeProvider() : this(null) {
  32.  
  33. }
  34. public ShapeProvider(IShapeProvider provider) {
  35. Provider = provider;
  36. }
  37. public Shape GetShape() {
  38. return State.GetShape(this);
  39. }
  40. public Shape CreateShape() {
  41. if(Provider != null)
  42. return Provider.GetShape();
  43. else
  44. throw new Exeption("ShapeProvider wasn't set");
  45. }
  46. public Shape CreateShape(IShapeProvider provider) {
  47. if(provider != null) {
  48. return provider.GetShape();
  49. } else {
  50. throw new Exeption("ShapeProvider wasn't set");
  51. }
  52. }
  53. private int ShapesLeft {
  54. get {
  55. return shapesLeft;
  56. }
  57. set {
  58. shapesLeft = value;
  59. AmountHasChanged();
  60. }
  61. }
  62. public void RemoveShape() {
  63. --ShapesLeft; //вызываем set
  64. }
  65. public void AddShape() {
  66. ++ShapesLeft; //вызываем set
  67. }
  68. private void AmountHasChanged() {
  69. if(shapesLeft == 0) {
  70. State = new ShapeProviderShapesEnd();
  71. }else if(shapesLeft > 0) {
  72. State = new ShapeProviderShapesLeft();
  73. }
  74. }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement