The basics are that a template is based on the URL, so say you have your default template group as "site", "site/index" will be your homepage - so your initial design can go in there. So that you can share elements (header, footer, etc), you might be using embeds to other templates.
But if you create other templates they will then be accessible on URL, so creating another template in the "site" group called "about" can contain completely different design template and be accessible via /about.
This may also mean using different template groups, for example creating a "blog" template group, would mean the URL /blog would go to the "index" of that template group.
Alternatively, you can route it through the "index" template...
{embed="includes/head"}
{embed="includes/header"}
{if "{segment_1}" == ""}
{!-- HOMEPAGE --}
{embed="content/homepage"}
{if:else}
{embed="content/content-page"}
{/if}
{embed="includes/footer"}
The above will share the same header and footer templates, but allow complete freedom in different content templates. 2 new template groups are utilised in the above (includes and content).
You could approach it using
{exp:channel:entries channel="homepage"...}
HOMEPAGE CONTENT
{/exp:channel:entries}
{exp:channel:entries channel="content"...}
CONTENT CONTENT
{/exp:channel:entries}
But the overhead would be much greater and not recommended. In the same way that...
site/index template
{exp:channel:entries}
{embed="content/{channel_short_name}"}
{/exp:channel:entries}
Will embed different templates based on your channel name (other templates would be in the "content" template group and named to match the channel short name). But again, will have the minor overhead of the initial channel:entries just to determine the channel - better to use segment conditionals.
There are many ways to approach EE, some right, some wrong, some clean, some messy, but ultimately it's what you prefer and what works for what you're trying to achieve.
To name but a few places to start...