It’s a good practice to share code across platforms in order to save the cost of development and maintenance. Apps on different platforms can have similar functionality, but the look and feel (i.e. UX) should be compliant with the platform. At the same time, the app should be able to use device specific features such as Touch ID on iPhone. From that perspective, it is important that the development tool has ability to share common code as much as possible, but also provide platform specific functionality and UX when required.
There are several tools available for cross platform development such as PhoneGap, Ionic, Titanium, Xamarin etc. They can be broadly classified in two categories, ones that run an app in a shell (e.g. PhoneGap, Ionic) and others that generate Native Code (e.g. Xamarin, Titanium).
Tools that generate platform specific UX maintain the native look and feel of the platform. This gives a familiar UX to the users and reduces the learning curve. At the same time, the app delivers the performance of the binary code and avoids sluggishness. These tools come with a price tag.
Xamarin supports variety of design patterns. There are several third party libraries and plugins available for Xamarin (e.g. Telerik, Infragistics). Over the time, Xamarin has stayed current with trends in technology in each platform. So new features can be easily incorporated in the apps. The price tag associated with it provides good return on investment when accounted for developer productivity. This would be a good tool to build complex applications with a native look and feel.