JAVA SE em MVC- Ajuda por favor =(

Boa noite.

Estou fazendo um CRUD usando MVC, e tenho que fazer com que o programa funcione com uma DAO feita com SQL e com uma DAO feita com listas de array em memória (Não simultaneamente, quando alternar de uma DAO para outra o programa tem que funcionar do mesmo jeito ) minhas duvidas são as seguintes. Posso instanciar a DAO na classe principal? Tenho 3 tabelas no banco de dados, tenho que fazer uma DAO e um controlador para cada tabela? Para o programa funcionar com as duas DAOs é só nomear os métodos de ambas igualmente certo? Controlador é a mesma coisa que FACADE? O construtor pode ficar no controlador?
Segue meu código:

TO (Não vou colocar os gets e sets para não ficar gigante…):

package TO;

public class Professor {
	private Integer rg;
	private String nome; 
	private String titulo;

DAO

public class ConsultasProfessor extends Conexao {
	
	public boolean inserir(Professor pro) {
		PreparedStatement ps = null;
		Connection con = getConexao();
		
		String sql = "INSERT INTO professor (nome, rg, titulo) VALUES (?,?,?)";
		
		try {
			ps = con.prepareStatement(sql);
			ps.setString(1, pro.getNome());
			ps.setInt(2, pro.getRg());
			ps.setString(3, pro.getTitulo());
			ps.execute();
			
			return true;
		} catch (SQLException e) {
			System.err.println(e);
			return false;
		} finally {
			try {
				con.close();
			} catch (SQLException e) {
				System.err.println(e);
			}
		}
	}
}

Controler

public class CtrlProfessor implements ActionListener {
	
	private Professor professor;
	private ConsultasProfessor consultaprofessor;
	private frmProfessor frmprofessor;
	
	public CtrlProfessor(Professor professor, ConsultasProfessor consultaprofessor, frmProfessor frmprofessor) {
		this.professor = professor;
		this.consultaprofessor = consultaprofessor;
		this.frmprofessor = frmprofessor;
		this.frmprofessor.btnBuscar.addActionListener(this);
		this.frmprofessor.btnModificar.addActionListener(this);
		this.frmprofessor.btnDeletar.addActionListener(this);
		this.frmprofessor.btnSalvar.addActionListener(this);
		this.frmprofessor.btnLimpar.addActionListener(this);
	}
	
	public void iniciar() {
		frmprofessor.setTitle("Professor");
		frmprofessor.setLocationRelativeTo(null);
	}
	
	public void limpar() {
		frmprofessor.txtNome.setText("");
		frmprofessor.txtRG.setText("");
		frmprofessor.txtTitulo.setText("");
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == frmprofessor.btnSalvar) {
			professor.setNome(frmprofessor.txtNome.getText());
			professor.setRg(Integer.parseInt(frmprofessor.txtRG.getText()));
			professor.setTitulo(frmprofessor.txtTitulo.getText());
			
			if (consultaprofessor.inserir(professor)) {
				JOptionPane.showMessageDialog(null, "Salvo com sucesso!");
				limpar();
			} else {
				JOptionPane.showMessageDialog(null, "Erro ao salvar, consulte o log!");
				limpar();
			}
		}
	}
}

Classe principal

public class ProjetoMvc {
	/**
	 * @param args the command line arguments
	 */
	public static void main(String[] args) {
		Professor professor = new Professor();
		frmProfessor frmprofessor = new frmProfessor();
		ConsultasProfessor consultaprofessor = new ConsultasProfessor();
		
		CtrlProfessor ctrlprofessor = new CtrlProfessor(professor, consultaprofessor, frmprofessor);
		ctrlprofessor.iniciar();
		frmprofessor.setVisible(true);
	}
}

e a view só tem o frame.