java软件设计的三层结构
接口:
package dao;
public interface Dao {
String getData();
}
package biz;
import dao.Dao;
public interface Biz {
void setDao(Dao dao);
String dealData();
}
package view;
import biz.Biz;
public interface View {
void setBiz(Biz biz);
void showData();
}
实现类:
package dao; import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException; public class FileDaoImpl implements Dao { @Override
public String getData() {
String data= null;
BufferedReader br= null;
try {
br= new BufferedReader(new FileReader("test.txt"));
data= br.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (br!=null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return data;
} }
package biz;
import dao.Dao;
public class UpperCaseBizImpl implements Biz {
private Dao dao;
@Override
public void setDao(Dao dao) {
this.dao= dao;
}
@Override
public String dealData() {
String data= dao.getData();
if (data != null) {
data.toUpperCase();
}
return data;
}
}
package view;
import biz.Biz;
public class TextViewImpl implements View {
private Biz biz;
@Override
public void setBiz(Biz biz) {
this.biz= biz;
}
@Override
public void showData() {
String data= biz.dealData();
System.out.println(data);
}
}
Object Factory:
package factory; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties; import biz.Biz; import view.View; import dao.Dao; public class SimpleFactory {
private Properties properties;
public SimpleFactory() {
properties= new Properties();
InputStream is= null;
try {
is= new FileInputStream("conf.properties");
properties.load(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (is!=null) {
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} public Dao createDao(){
String className = properties.getProperty("dao");
return (Dao)createObject(className);
}
public Biz createBiz(){
String className= properties.getProperty("biz");
return (Biz) createObject(className);
}
public View createView(){
String className= properties.getProperty("view");
return (View) createObject(className);
}
private Object createObject(String name){
Object result= null;
try {
Class clazz = Class.forName(name);
result = clazz.newInstance();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}
配置文件:conf.properties
view=view.TextViewImpl
biz=Biz.UpperCaseBizImpl
dao=Dao.FileDaoImpl
文本文件:test.txt
HELLO WORLD
测试类:
package test; import view.View;
import biz.Biz;
import dao.Dao;
import factory.SimpleFactory; public class TestMain { /**
* @param args
*/
public static void main(String[] args) {
SimpleFactory simpleFactory= new SimpleFactory();
Dao dao= simpleFactory.createDao();
Biz biz= simpleFactory.createBiz();
biz.setDao(dao);
View view = simpleFactory.createView();
view.setBiz(biz);
view.showData();
} }
output:
HELLO WORLD
java软件设计的三层结构的更多相关文章
- Atitit.软件开发的三层结构isv金字塔模型
Atitit.软件开发的三层结构isv金字塔模型 第一层,Implements 层,着重与功能的实现.. 第二次,spec层,理论层,设计规范,接口,等.流程.方法论 顶层,val层,价值观层,原则, ...
- 最简单直接地理解Java软件设计原则之开闭原则
写在前面 本文属于Java软件设计原则系列文章的其中一篇,后续会继续分享其他的原则.想以最简单的方式,最直观的demo去彻底理解设计原则.文章属于个人整理.也欢迎大家提出不同的想法. 首先是一些理论性 ...
- 最简单直接地理解Java软件设计原则之接口隔离原则
理论性知识 定义 接口隔离原则, Interface Segregation Principle,(ISP). 一个类对应一个类的依赖应该建立在最小的接口上: 建立单一接口,不要建立庞大臃肿的接口: ...
- 最简单直接地理解Java软件设计原则之单一职责原则
理论性知识 定义 单一职责原则, Single responsibility principle (SRP): 一个类,接口,方法只负责一项职责: 不要存在多余一个导致类变更的原因: 优点 降低类的复 ...
- 最简单直接地理解Java软件设计原则之依赖倒置原则
理论性知识 定义 依赖倒置原则,Dependence Inversion Principle (DIP) 高层模块不应该依赖低层模块.二者都应该依赖其抽象. 抽象不应该依赖细节,细节应该依赖抽象. 针 ...
- java中从Spring、Hibernate和Struts框架的action、service和dao三层结构异常处理体系设计
Spring的事务实现采用基于AOP的拦截器来实现,如果没有在事务配置的时候注明回滚的checked exception,那么只有在发生了unchecked exception的时候,才会进行事务回滚 ...
- 如何使用ABP进行软件开发(2) 领域驱动设计和三层架构的对比
简述 上一篇简述了ABP框架中的一些基础理论,包括ABP前后端项目的分层结构,以及后端项目中涉及到的知识点,例如DTO,应用服务层,整洁架构,领域对象(如实体,聚合,值对象)等. 笔者也曾经提到,AB ...
- java开发是否一定要使用三层结构
从开始学习java的时候,爷爷的爷爷就教导我们,要使用三层结构去开发结构明细,低耦合,高可用的项目.但是具体开发中,每新建一张表,就要新建BO,dao层,服务层,而新建这5,6个类也许仅仅只为了实现一 ...
- java中的mvc和三层结构究竟是什么关系
一件事,要知其然往往很简单,要知其所以然通常不是那么容易,就如最近重新巩固spring的过程中,就觉得还有许多问题其实并不是十分明了. 屈指一算,手头上做过的正式项目也有了四五六七个了,不管用的数据库 ...
随机推荐
- iOS - Swift Struct 结构体
1.Struct 的创建 1.1 基本定义 结构体的定义 // 定义结构体数据类型 struct BookInfo { // 每个属性变量都必须初始化 var ID:Int = 0 var Name: ...
- 流媒体基础实践之——Nginx-RTMP-module 指令详解
转载网址:http://blog.csdn.net/aoshilang2249/article/details/51483814
- As Easy As Possible
题目链接 题意:一个只含e, a, s, y的字符串,问[l, r]内有多少个easy序列? 题解:倍增. #include <bits/stdc++.h> using namespace ...
- JAVA必背面试题和项目面试通关要点
一 数据库 1.常问数据库查询.修改(SQL查询包含筛选查询.聚合查询和链接查询和优化问题,手写SQL语句,例如四个球队比赛,用SQL显示所有比赛组合:举例2:选择重复项,然后去掉重复项:) 数据库里 ...
- Java用通配符 获得泛型的协变和逆变
Java对应泛型的协变和逆变
- [js]事件综合 整理
原文链接:http://www.cnblogs.com/xxcanghai/p/5205998.html 事件流:页面接收事件的顺序,IE提出了事件冒泡流,Netscape提出了事件捕获流. 事件冒泡 ...
- JavaScript屏蔽Backspace键
原文:http://www.cnblogs.com/xdp-gacl/p/3785806.html 今天在IE浏览器下发现,当把使用readonly="readonly"属性将文本 ...
- Linux大文件分割split和合并cat使用方法
本文主要介绍linux下两个命令:split和cat.其中,相信大家都熟悉cat命令,一般用来查看一个文件的内容,但是它还其它的功能,比如这里要介绍的文件合并功能,它可把多个文件内容合并到一个文件中. ...
- xcode6 framework missing submodule xxx 警告
xcode6 framework missing submodule xxx 警告 从xcode6开始,iOS可以直接创建生成framework了 如: 创建 framework 项目,TFKit.f ...
- 20145218 《Java程序设计》第8周学习总结
20145218 <Java程序设计>第8周学习总结 教材学习内容总结 15.1 日志 15.1.1日志API简介 java.util.logging包提供了日志功能相关类与接口,不必额外 ...