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的过程中,就觉得还有许多问题其实并不是十分明了. 屈指一算,手头上做过的正式项目也有了四五六七个了,不管用的数据库 ...
随机推荐
- [转载] ORMs under the hood
原文: http://www.vertabelo.com/blog/technical-articles/orms-under-the-hood It often happens that if so ...
- poj2546Circular Area(两圆相交面积)
链接 画图推公式 这两种情况 都可用一种公式算出来 就是两圆都求出圆心角 求出扇形的面积减掉三角形面积 #include <iostream> using namespace std; # ...
- Python学习(5)条件语句
目录 Python 条件语句 Python 简单的语句组 Python 条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了 ...
- access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
在开启derby服务出现该错误(测试hibernate 连接数据库时 使用myeclipse2014自带的数据库--windows->show view->other->Myecl ...
- Nginx反向代理负载均衡
环境准备: 总共四台机器,两台装有Nginx的机器做负载均衡,两台机器装有Apache作为WEB服务器. 机器信息 hostname IP 说明 lb01 192.168.1.19 nginx主负载均 ...
- you don't have permission to view it 解决
the file couldn't be opened because you don't have permission to view it 简单设置下面的选项即可,不要谢我啊! change ...
- 基于dubbo源码包通过Maven构建dubbo的详细步骤
通过Maven构建dubbo 既然可以下载得到源码以及发布包,那么为什么要去构建dubbo呢?,我们先来看下dubbo的主要模块: 我们不仅要使用dubbo的核心框架,还要使用它的一些服务,比如管理控 ...
- php内存处理须知【转】
04 Mar 11 深入理解PHP内存管理之谁动了我的内存 作者: Laruence( ) 本文地址: http://www.laruence.com/2011/03/04/1894.html 转 ...
- entity reference在views中的运用
一个views block可以获取从url过来的nid,某个node的有entity reference字段, 填入一点数据,然后在views里关联一下这个entity reference field ...
- C++ Primer 笔记(1)基础中的战斗机 输入输出 对输入不定数据处理
今天打算再重新好好的看一遍C++ Primer这本很经典的书籍,笔记开始: 1.每个C++程序都包含一个或者多个函数,其中必须有一个main,操作系统通过调用main入手运行程序: 2.函数包括:返回 ...