Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class IShapeProviderState {
- Shape GetShape(ShapeProvider provider);
- }
- class Square : Shape {
- }
- class Rect : Shape {
- }
- class SquareProvider : IShapeProvider {
- public void GetShape() {
- return new Square();
- }
- }
- class ShapeProviderShapesLeft : IShapeProviderState {
- public Shape GetShape(ShapeProvider provider) {
- provider.RemoveShape();
- return provider.CreateShape();
- }
- }
- class ShapeProviderShapesEnd : IShapeProviderState {
- public Shape GetShape(ShapeProvider provider) {
- throw new Exception("Figures ended");
- }
- }
- class ShapeProvider {
- int shapesLeft = 10;
- public IShapeProviderState State;
- public IShapeProvider Provider {get;set;} //по клику ставим какой-либо провайдер
- public ShapeProvider() : this(null) {
- }
- public ShapeProvider(IShapeProvider provider) {
- Provider = provider;
- }
- public Shape GetShape() {
- return State.GetShape(this);
- }
- public Shape CreateShape() {
- if(Provider != null)
- return Provider.GetShape();
- else
- throw new Exeption("ShapeProvider wasn't set");
- }
- public Shape CreateShape(IShapeProvider provider) {
- if(provider != null) {
- return provider.GetShape();
- } else {
- throw new Exeption("ShapeProvider wasn't set");
- }
- }
- private int ShapesLeft {
- get {
- return shapesLeft;
- }
- set {
- shapesLeft = value;
- AmountHasChanged();
- }
- }
- public void RemoveShape() {
- --ShapesLeft; //вызываем set
- }
- public void AddShape() {
- ++ShapesLeft; //вызываем set
- }
- private void AmountHasChanged() {
- if(shapesLeft == 0) {
- State = new ShapeProviderShapesEnd();
- }else if(shapesLeft > 0) {
- State = new ShapeProviderShapesLeft();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement