本帖适合已经学习完java基础,开始学习高新技术的同学原帖地址猛击我
花了点时间给两个楼主解答,同时希望初学者少走弯路,不要在为“面向对象”而面向对象,要提前理解JavaBean+DAO的模式(简单的说,就是把数据和方法完全分离;如果实在还不理解,就回忆下C语言的"结构体+函数式"编程的思想,面向过程你能理解吧,换了个更简单的面向对象怎么就纠结了?),简化今后的编程,加快JavaSE学习的速度。
为什么现在有泛型,为什么有反射,为什么有纯POJO?这些思想就是要让你的“数据”和“操作”完全分离;类似于“冰箱具有--开打、关闭方法,汽车具有--行驶、刹车方法”的代码绝对绝对不能再出现在Pojo当中了!
以后谁再写以下这种2B代码你们项目经理跟你没完!- package beantest.bean;
-
- /**
- *冰箱
- *
- */
- public class Fridge {
- private String name;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * 冰箱具有打开的行为
- */
- public void open(){
- System.out.println("打开"+name);
- }
-
- /**
- * 冰箱具有关闭的行为
- */
- public void close(){
- System.out.println("关闭"+name);
- }
- }
复制代码 企业级的设计思路有MVC以及SSH框架的单例、代理、Aop等等,
但面向对象基本上只有Dao+JavaBean,没有其他;连继承都很少,纵观马士兵、张孝祥、韩顺平的SSH视频,只找到两个:HibernateTemplate、ActionSupport而已;所以,如果初学者再过分的纠结于所谓的抽象、封装、继承、多态,只会耽误学习Java的进度!
比如一个帖子问到:
老王和老李是夫妻。老王是一名大学教授,老李是一名会计,他们的父母都健在。老王和老李有一个儿子,15岁了,在上中学。老王有时候去打太极拳,老李有时候去兼职讲课。用OO的思想描述他们的关系
可以这样解答,诸位可能有更加优美的代码,但设计思路在20年之内是不会变的。
下面是项目的包结构:
db里边是数据库(我们现在用List代替真正的数据库)
bean包里边是实体(习惯上称为JavaBean、POJO、Entity等等)
dao包里边是增删改查的类(对一个数据的基本操作就是CRUD)
logic包是业务逻辑层(如:判断两人是否是夫妻,判断父母是否健在等等)
util包用于存放:数据字典以及一些常用的正则、IO、日期的工具类
- package beantest.bean;
-
- /**
- *爱好
- *
- */
- public class Hobby {
- /**
- * 主键--在数据库中的下标
- */
- private int id;
- /**
- * 名称
- */
- private String name;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Hobby(int id, String name) {
- super();
- this.id = id;
- this.name = name;
- }
- @Override
- public String toString() {
- return "Hobby [id=" + id + ", name=" + name + "]";
- }
-
- }
复制代码- package beantest.bean;
- /**
- * 职业
- */
- public class Job {
-
- /**
- * 主键--在数据库中的下标
- */
- private int id;
-
- /**
- * 名称
- */
- private String name;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Job(int id, String name) {
- super();
- this.id = id;
- this.name = name;
- }
- public Job() {
- super();
- }
- @Override
- public String toString() {
- return "Job [id=" + id + ", name=" + name + "]";
- }
-
- }
复制代码- package beantest.bean;
-
- import java.util.List;
- /**
- * 人
- */
- public class Person {
-
- /**
- * 主键--在数据库中的下标
- */
- private int id;
- /**
- * 姓名
- */
- private String name;
- /**
- * 性别 1-男 2-女
- */
- private int male;
- /**
- * 年龄
- */
- private int age;
- /**
- * 是否在世
- */
- private boolean isLive;
- /**
- * 父亲id引用 -1表示不存在
- */
- private int fatherId;
- /**
- * 母亲id引用 -1表示不存在
- */
- private int motherId;
- /**
- * 爱人的id引用 -1表示不存在
- */
- private int loverId;
- /**
- * 职业的id引用 -1表示不存在
- */
- private int jobId;
- /**
- * 由于可以有多个爱好,所以一个人拥有爱好ID的集合
- */
- private List<Integer> hobbyList;
- public List<Integer> getHobbyList() {
- return hobbyList;
- }
- public void setHobbyList(List<Integer> hobbyList) {
- this.hobbyList = hobbyList;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getMale() {
- return male;
- }
- public void setMale(int male) {
- this.male = male;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public boolean isLive() {
- return isLive;
- }
- public void setLive(boolean isLive) {
- this.isLive = isLive;
- }
- public int getFatherId() {
- return fatherId;
- }
- public void setFatherId(int fatherId) {
- this.fatherId = fatherId;
- }
- public int getMotherId() {
- return motherId;
- }
- public void setMotherId(int motherId) {
- this.motherId = motherId;
- }
- public int getLoverId() {
- return loverId;
- }
- public void setLoverId(int loverId) {
- this.loverId = loverId;
- }
-
- public int getJobId() {
- return jobId;
- }
- public void setJobId(int jobId) {
- this.jobId = jobId;
- }
- public Person() {
- super();
- }
- public Person(int id, String name, int male, int age, boolean isLive,
- int fatherId, int motherId, int loverId, int jobId) {
- super();
- this.id = id;
- this.name = name;
- this.male = male;
- this.age = age;
- this.isLive = isLive;
- this.fatherId = fatherId;
- this.motherId = motherId;
- this.loverId = loverId;
- this.jobId = jobId;
- }
- @Override
- public String toString() {
- return "Person [id=" + id + ", name=" + name + ", male=" + male + ", age="
- + age + ", isLive=" + isLive + ", fatherId=" + fatherId
- + ", motherId=" + motherId + ", loverId=" + loverId + ", jobId="
- + jobId + "]";
- }
-
-
- }
复制代码- package beantest.dao;
-
- import java.util.List;
-
- /**
- *单表 CRUD的类
- */
- public class BaseDao<T> {
- /**
- * 操作哪个表
- */
- private List<T> table;
-
- public BaseDao(List<T> table) {
- super();
- this.table = table;
- }
- /**
- * 插入
- */
- public void insert(T t){
- table.add(t);
- }
- /**
- * 查询
- */
- public T query(int id){
- return table.get(id);
- }
-
- /**
- * 修改
- */
- public void update(T t,int id){
- table.set(id, t);
- }
- /**
- * 删除
- */
- public T delete(int id){
- return table.remove(id);
- }
- }
复制代码- package beantest.db;
-
- import java.util.ArrayList;
- import java.util.List;
-
- import beantest.bean.Hobby;
- import beantest.bean.Job;
- import beantest.bean.Person;
- import beantest.util.Dectionary;
-
- /**
- *数据库,每个数据库的记录的id从0开始
- *
- */
- public class DataBase {
- public static List<Person> personDb=new ArrayList<Person>();
- public static List<Job> jobDb=new ArrayList<Job>();
- public static List<Hobby> hobbyDb=new ArrayList<Hobby>();
- //初始化数据库并设置关联
- static{
- //初始化person数据库
- Person p0=new Person(0, "老王的父亲", Dectionary.Male, 60, Dectionary.Live, -1, -1, 1,-1);
- Person p1=new Person(1, "老王的母亲", Dectionary.Female, 60, Dectionary.Live, -1, -1, 0,-1);
-
- Person p2=new Person(2, "老李的父亲", Dectionary.Male, 60, Dectionary.Live, -1, -1, 3,-1);
- Person p3=new Person(3, "老李的父亲", Dectionary.Female, 60, Dectionary.Live, -1, -1, 2,-1);
-
- Person p4=new Person(4, "老王", Dectionary.Male, 40, Dectionary.Live, 0, 1, 5,0);
- Person p5=new Person(5, "老李", Dectionary.Female, 40, Dectionary.Live, 2, 3, 4,1);
-
- Person p6=new Person(6, "儿子", Dectionary.Male, 15, Dectionary.Live, 4, 5, -1, 2);
- personDb.add(p0); personDb.add(p1); personDb.add(p2); personDb.add(p3);
- personDb.add(p4); personDb.add(p5); personDb.add(p6);
- //初始化job数据库
- Job job0=new Job(0, "教师");
- Job job1=new Job(1, "会计");
- Job job2=new Job(2, "上中学");
- jobDb.add(job0);jobDb.add(job1);jobDb.add(job2);
-
- //初始化hobby数据库
- Hobby h0=new Hobby(0, "太极拳");
- Hobby h1=new Hobby(0, "兼职讲课");
- hobbyDb.add(h0);
- hobbyDb.add(h1);
-
- //设置爱好
- List<Integer> wangList=new ArrayList<Integer>();
- List<Integer> liList=new ArrayList<Integer>();
- wangList.add(0);
- liList.add(1);
- p0.setHobbyList(wangList);
- p1.setHobbyList(liList);
- }
- }
复制代码 |