jeudi 20 juin 2019

Print pyramid and invert pyramid pattern

I am printing pattern,pattern include invert pyramid and pyramid pattern contain invert pyramid and pyramid

I can not print in shell script

Regex.Matches find least amount of characters per each match found

I want to iterate over each match but my code only finds 1 match by getting everything between the first and last character to find in the pattern.

Basically, I want to iterate over the 3 matches found in the following string:

value = "{account_id}{user_id}{someValue}";

But it only finds 1 match (the whole thing) using the following pattern: "{\\S+}"

foreach (Match match in Regex.Matches(value, "{\\S+}"))
{
    var key = match.Value.Replace("{", "").Replace("}", "").Trim();
    // do stuff with key...
}

This makes sense because "{" and "}" are both non-white space character so I tried using "{[a-zA-Z_]}" but this fails too.

foreach (Match match in Regex.Matches(value, "{[a-zA-Z_]}"))
{
    var key = match.Value.Replace("{", "").Replace("}", "").Trim();
    // do stuff with key...
}

Variable key in the loop should be "account_id", then "user_id", then "someValue", however it is always "account_iduser_idsomeValue (the whole thing).

How can I fix this?

Design Pattern for a very long base class

If I have 8 long methods that will be shared among 4 child classes (not all of them will be using all the methods) some will be use only 2 others 4, etc.

If I create a base class and each of the 4 child classes inherit from the base class then the problem is solved but I am trying to avoid using a very long base class.

I can try to divide the base class in more classes depending on how they are used and then use multiple inheritance, this is another solution.

Is there any other pattern to solve this problem?? What would be the optimal?

Shared pointer using (this) registering to an observer

I am having a problem trying to use a shared pointer from a class that wants to register to an observer (using ) here is the example.

Observer.hpp

class Observer {
virtual void update() = 0;
}

Consumer.hpp

class Consumer : public Observer {
virtual void update() override;
}

Consumer.cpp

class Consumer {
***

THIS IS NOT WORKING - How to do it using shared pointers??


register.registerObserver(std::make_shared<Observer>(this));
}

Register.cpp

class Register {
void registerObserver(const std::shared_ptr<Observer>& observer);
}

mercredi 19 juin 2019

Implementation of Interface Segregation Principle Example given in Uncle Bob's Agile Principles Book

Is my implementation of Figure 12-1 correct? Figure12-1

This is an implementation of Interface Pollution example from Uncle Bob's book Agile Principles Patterns and Practices in C#.

I have tried implementing it as following:-

using System;

namespace AgilePrinciplesCSharp.Chapter12.Listing12_2
{
    class Listing12_2
    {
        static void Main(string[] args)
        {
            var door = new TimedDoor();
            var client = new Client(door);
            client.TimeOut();
        }
    }

    public interface ITimerClient
    {
        void TimeOut();
    }

    // We force Door, and therefore (indirectly) TimedDoor, to inherit from TimerClient.
    public interface IDoor : ITimerClient
    {
        void Lock();
        void Unlock();
        bool IsDoorOpen();
    }

    // Implementation of Door Interface with Timer functionality
    public class TimedDoor : IDoor
    {
        public bool IsDoorOpen()
        {
            return true;
        }

        public void Lock()
        {
            Console.WriteLine("Door Locked");
        }

        public void TimeOut()
        {
            var timer = new Timer();
            timer.Register(5, this);
            Console.WriteLine("Timeout! Door left open for so long");
        }

        public void Unlock()
        {
            Console.WriteLine("Door Unlocked");
        }
    }

    // Timer class can use an object of TimerClient
    public class Timer
    {
        public void Register(int timeout, ITimerClient client)
        {
            /* CODE */
        }
    }

    // Client uses Door Interface without depending upon any particular implementation of Door
    public class Client
    {
        IDoor door;

        public Client(IDoor door)
        {
            this.door = door;
        }

        public void TimeOut()
        {
            door.TimeOut();
        }
    }
}

My doubt is in the way the implementation is described in the book, where Door is sometimes being called as a class or sometimes as an interface and i am getting confused whether i need to have a separate implementation of Door class apart from IDoor interface? Also the author does not use I notation while naming an interface which makes it even more confusing.

If anyone has read the book, i hope can understand my concern and help me out with this.

Design patterns iOS - Swift - Coordinator, MVP and MVVM

I need advice on which design pattern to adopt or recently in-usage for large applications(having DB storage, web-service interactions etc.), keeping in mind:

  • Harnessing the latest swift coding features
  • Code maintainability
  • Maximum test coverage
  • Minimizing lines of code and source files count

I have been shifting between Android and iOS and have not worked on iOS Apps for about a year now. If I want to start an app from scratch, I need some inputs to give an heads-up.

I have gone through various tutorials explaining each design patterns. But, each one looks good as per the objective it is trying to put forth and as far as small apps are concerned.

Need advice based on patterns used by large-scale apps.

Thanks in advance!

Pattern to access differently named member functions of derived classes

So I have the following class hierarchy and both the derived classes have differently named member functions which I want to access in a common manner.

class T {}
class T1::T {
    int getIntT1() {}
}
class T2::T {
    int getIntT2() {}
}

I created a template to access these member functions.

template<typename T, int (T::*f)()>
int getInt(T t) {}

I can't change the class definitions, so is there any other way to do this?