Padrão MVC - Model, View e Controller

Esse padrão tem a finalidade de dividir o projeto em três camadas:
1- Camada Modelo: A camada Modelo tem as classes de dados que define o domínio da aplicação, por exemplo, classe aluno, professor, turma se sua aplicação for de controle de turma.
2- Camada View: A camada View corresponde a qualquer entrada de dados da aplicação, por exemplo, leitura de dados pelo console, paginas jsp, xhtml entre outras.
3- Camada Control: A camada control corresponde à regra de negocio da aplicação e centralizando as informações vindas da camada view, passando para camada de modelo e voltando para camada de view.

Camada de Modelo

package modelo;

public class Pessoa {

	private Integer idPessoa;
	private String nome;
	private Integer idade;

	public Pessoa() {
	}

	public Pessoa(Integer idPessoa, String nome, Integer idade) {
		super();
		this.idPessoa = idPessoa;
		this.nome = nome;
		this.idade = idade;
	}	

	@Override
	public String toString() {
		return "Pessoa [idPessoa=" + idPessoa + ", nome=" + nome + ", idade=" + idade + "]";
	}

	public Integer getIdPessoa() {
		return idPessoa;
	}
	public void setIdPessoa(Integer idPessoa) {
		this.idPessoa = idPessoa;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Integer getIdade() {
		return idade;
	}
	public void setIdade(Integer idade) {
		this.idade = idade;
	}
}
        

Camada de Controle

package controle;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import modelo.Pessoa;

public class ValidaPessoa {
 
	public void validaCodigo(Pessoa p)throws Exception{
		if (p.getIdPessoa()<=0){
			throw new Exception("Codigo Menor ou igual a zero invalido ...");
		}
	}
	
	public void validaIdade(Pessoa p)throws Exception{
		if (p.getIdade()<18){
			throw new Exception("So pode ser cadastrado maior de idade");
		}
	}

	public  void validaNome(Pessoa p)throws Exception{
		Pattern pa = Pattern.compile("[A-Z a-z]{3,35}");
		Matcher ma = pa.matcher(p.getNome()); 
		 if (! ma.matches()){  
			 throw new Exception("Nome somente com Letras faixa (3,35)");
		 }//se for falso lança o erro
	}
}

Camada View

package view;

import java.util.Scanner;

public class InputPessoa {

	public Integer lerCodigo() {
		try {
			System.out.println("Digite o Codigo :");
			Scanner in = new Scanner(System.in);
			return in.nextInt();
		} catch (Exception ex) {
			System.out.println("Digite numero inteiro ...");
			return lerCodigo();
		}
	}

	public Integer lerIdade() {
		try {
			System.out.println("Digite a Idade :");
			Scanner in = new Scanner(System.in);
			return in.nextInt();
		} catch (Exception ex) {
			System.out.println("Digite idade inteira ...");
			return lerIdade();
		}
	}

	public String lerNome() {
		System.out.println("Digite o Nome :");
		Scanner in = new Scanner(System.in);
		return in.nextLine();
	}
}

Execução do Programa no Main

package main;

import modelo.Pessoa;
import view.InputPessoa;
import controle.ValidaPessoa;

public class Main {

	public static void main(String[] args) {
		  Pessoa p = new Pessoa();
		  InputPessoa ip = new InputPessoa();		  
		  ValidaPessoa vp = new ValidaPessoa();		 
		
	 	 try{
	 		  p.setIdPessoa(ip.lerCodigo()); 
	 		  p.setNome(ip.lerNome());
	 		  p.setIdade(ip.lerIdade());
     		     vp.validaCodigo(p);
	 		     vp.validaNome(p);
	 		     vp.validaIdade(p);			       
			  
	 		System.out.println("Dados" + p);
		}catch(Exception ex){
			System.out.println("Error" + ex.getMessage());
    	}				
	}
}