SSM之Spring框架--->>墨盒案例
分析:
程序中包括打印机(Printer)、墨盒(Ink)、和纸张(Paper)、三类组件
首先创建一个新项目文件Spring_Box

我们来定义墨盒和纸张的接口类
墨盒接口Ink.java文件内容如下:
package entiey;
public interface Ink {
/**
* 定义打印采用的颜色的方法
* r(红色)
* g(绿色)
* b(蓝色)
*/
public String getColor(int r,int g,int b);
}
纸张接口Paper.java文件内容如下:
package entiey;
public interface Paper {
/**
* 纸张接口
*/
public static final String newine="\r\n";
//输入一个字符到纸张
public void putInChar(char c);
//得到输出到纸张上的内容
public String getContent();
}
这时候我们创建一个printer包名来写Printer程序:
package printer; import entiey.Ink;
import entiey.Paper; /**
* 打印机程序
* @author ASUS
*
*/
public class Printer {
//面向接口编程,而不是具体的实现类
private Ink ink=null;
private Paper paper=null;
/**
* 设置注入所需的setter方法
*/
public void setInk(Ink ink) {
this.ink = ink;
} public void setPaper(Paper paper) {
this.paper = paper;
}
/**
* 设置打印机打印方法
*/
public void print(String str) {
//输出颜色标记
System.out.println("使用"+ink.getColor(255, 200, 0)+"颜色打印:\n");
//逐字符输出到纸张
for(int i=0;i<str.length();++i) {
paper.putInChar(str.charAt(i));
}
//将纸张的内容输出
System.out.print(paper.getContent());
}
}
然后我们开始实现墨盒(Ink)和纸张(Paper)的接口实现类
ColorInk.java文件内容如下:
package entiey;
import java.awt.Color;
public class ColorInk implements Ink{
//打印采用彩色
/**
* 彩色墨盒,ColorInk实现Ink接口
*/
@Override
public String getColor(int r, int g, int b) {
Color color =new Color(r,g,b);
return "#"+Integer.toHexString(color.getRGB()).substring(2);
}
}
GreyInk.java文件内容如下:
package entiey;
import java.awt.Color;
public class GreyInk implements Ink{
/**
* 灰色墨盒,GreyInk实现Ink接口
*/
@Override
public String getColor(int r, int g, int b) {
int c=(r+g+b)/3;
Color color=new Color(c,c,c);
return "#"+Integer.toHexString(color.getRGB()).substring(2);
}
}
TextPaper.java文件内容如下:
package entiey;
public class TextPaper implements Paper{
//每行字符数
private int charPerLine=16;
//每页行数
private int linePerPage=5;
//纸张中的内容
private String content="";
//当前横向位置,从0到charPerLine-1
private int posX=0;
//当前行数,从0到linePerPage-1
private int posY=0;
//当前页数
private int posP=1;
@Override
public void putInChar(char c) {
content+=c;
++posX;
//判断是否换行
if(posX==charPerLine) {
content+=Paper.newine;
posX=0;
++posY;
}
//判断是否翻页
if(posY==linePerPage) {
content+="==第"+posP+"页==";
content+=Paper.newine+Paper.newine;
posY=0;
++posP;
}
}
@Override
public String getContent() {
String ret=this.content;
//补齐本页空行,并显示页码
if(!(posX==0&&posY==0)) {
int count=linePerPage-posY;
for(int i=0;i<count;++i) {
ret+=Paper.newine;
}
ret+="==第"+posP+"页==";
}
return ret;
}
//setter方法
public void setCharPerLine(int charPerLine) {
this.charPerLine = charPerLine;
}
public void setLinePerPage(int linePerPage) {
this.linePerPage = linePerPage;
}
}
开始配置XML文件applicationContext.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> <!-- 定义彩色墨盒Bean,id是ColorInk -->
<bean id="colorInk" class="entiey.ColorInk"/>
<!-- 定义灰色墨盒Bean,id是GreyInk -->
<bean id="greyInk" class="entiey.GreyInk"/>
<!-- 定义A4纸张Bean,id是a4Paper -->
<!-- 通过setCharPerLine()方法为charPerLine属性注入每行字符数 -->
<!-- 通过setLinePerPage()方法为linePerPage属性注入每页行数 -->
<bean id="a4Paper" class="entiey.TextPaper">
<property name="charPerLine" value="10"/>
<property name="linePerPage" value="8"/>
</bean>
<!-- 定义B5纸张Bean,id是b5Paper -->
<bean id="b5Paper" class="entiey.TextPaper">
<property name="charPerLine" value="6"/>
<property name="linePerPage" value="5"/>
</bean>
<!-- 组装打印机,定义打印机Bean该Bean的id是printer.class指定该Bean实例的实现类 -->
<bean id="printer" class="printer.Printer">
<!-- 通过ref属性注入已经定义好的Bean -->
<!-- 注入彩色墨盒 -->
<property name="ink" ref="colorInk"/>
<!-- 注入灰色墨盒 -->
<property name="paper" ref="b5Paper"/>
</bean>
</beans>
最后我们通过测试类测试我们的代码运行结果如何
创建test包
testa.java文件内容如下:
package test;
/**
* 测试打印机
* @author ASUS
*
*/
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import printer.Printer; public class testa {
@Test
public void m1() {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//通过Printer bean的id来获取Printer实例
Printer printer=(Printer) context.getBean("printer");
String content="欸 朋友们好啊" +
"我是浑元形意太极门掌门人马保国" +
"刚才有个朋友问我" +
"马老师发生什么事啦" +
"我说怎么回事" +
"给我发了几张截图"
+"我一看" +
"哦" +
"原来是昨天 "+
"有两个年轻人" +
"三十多岁" +
"一个体重九十多公斤" +
"一个体重八十多公斤" +
"他们说" +
"欸" +
"有一个说是" +
"我在健身房练功" +
"颈椎练坏了" +
"马老师你能不能教教我浑元功法" +
"欸" +
"帮助治疗一下我的颈椎病" +
"我说可以" +
"我说你在健身房练死劲儿不好用" +
"他不服气" +
"欸" +
"我说小朋友" +
"你两个手来折我一个手指头" +
"他折不动" +
"他说你这也没用" +
"我说我这有用" +
"这是化劲儿" +
"传统功夫是讲化劲儿的" +
"四两拨千斤" +
"二百多斤的英国大力士" +
"都握不动我这一个手指" +
"他说要和我试试" +
"我说可以" +
"欸" +
"我一说他啪一下就站起来了" +
"很快啊" +
"然后上来就是" +
"一个左正蹬" +
"一个右鞭腿" +
"一个左刺拳" +
"我全部防出去了啊" +
"防出去以后自然是" +
"传统功夫以点到为" +
"右拳放在他鼻子上" +
"没打他" +
"我笑一下" +
"准备收拳" +
"因为这时间" +
"按照传统功夫的点到为止" +
"他就输了" +
"如果我这一拳发力" +
"一拳就把他鼻子打骨" +
"放在他鼻子上没用打他" +
"他也承认" +
"我先打到他面部" +
"他不知道拳放在他鼻子上" +
"他承认我先打到他面部啊" +
"我收拳的时间不打了" +
"他突然袭击左刺拳来打我脸" +
"啊" +
"我大意了啊" +
"没有闪" +
"欸" +
"他的左拳给我眼" +
"给我右眼蹭了一下" +
"但没关系啊" +
"他也说" +
"他结束也说了" +
"两分多钟以后" +
"当时流眼泪了捂着眼" +
"我说停停" +
"然后两分钟以后" +
"两分多钟以后" +
"就好了" +
"我说小伙子你不讲武德你不懂" +
"他说马老师对不起对不起" +
"我不懂规矩" +
"啊" +
"我是" +
"他说他是乱打的" +
"他可不是乱打的啊" +
"正蹬" +
"鞭腿" +
"左刺拳" +
"训练有素" +
"后来他说他练过三四年泰拳啊" +
"看来是有备而来" +
"这两个年轻人" +
"不讲武德" +
"来" +
"骗" +
"来" +
"偷袭" +
"我69岁" +
"老同志" +
"这好吗" +
"这不好" +
"我劝" +
"这位" +
"年轻人" +
"好自为之" +
"好好反思" +
"不要再犯这样的聪明" +
"小聪明" +
"啊" +
"额" +
"武林要以和为贵" +
"要讲武德" +
"不要搞" +
"窝里斗" +
"谢谢朋友们";
printer.print(content);
} }
我们来看看我们的运行结果如下:

好了测试成功这就是我们所需要的墨盒案例了,这里要注意!一定要导入jar包

SSM之Spring框架--->>墨盒案例的更多相关文章
- Spring框架加案例
依赖: <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> <dependenc ...
- 1.Spring框架入门案例
一.简单入门案例 入门案例:IoC 1.项目创建与结构 2.接口与实现类 User.java接口 package com.jd.ioc; /** * @author weihu * @date 201 ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring框架的基本思想
EJB的学习成本很高,开发效率却不高,需要编写很多重复的代码,这些问题阻止了EJB的继续发展.就在EJB技术止步不前的时候,Spring框架在合适的时机出现了,Spring框架和EJB不同,Sprin ...
- Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例
Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇文章的小伙伴,详细你已经有一定的Java ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:SSM(Spring+Spring MVC+MyBatis)框架整合搭建详细步骤
因为 Spring MVC 是 Spring 框架中的一个子模块,所以 Spring 与 SpringMVC 之间不存在整合的问题.实际上,SSM 框架的整合只涉及 Spring 与 MyBatis ...
- spring框架和junit框架结合使用案例
package ltssh; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.be ...
- spring框架学习笔记7:事务管理及案例
Spring提供了一套管理项目中的事务的机制 以前写过一篇简单的介绍事务的随笔:http://www.cnblogs.com/xuyiqing/p/8430214.html 还有一篇Hibernate ...
- Java基础-SSM之Spring和Mybatis整合案例
Java基础-SSM之Spring和Mybatis整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在之前我分享过mybatis和Spring的配置案例,想必大家对它们的 ...
- SSM,即Spring+SpringMVC+MyBatis三个开源框架的整合框架集。
SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中spring是一个轻 ...
随机推荐
- jar文件无法双击打开
1. jdk安装后环境变量未设置好 (无jdk先自行下载) 我的电脑-属性-高级系统设置-环境变量-系统变量 找到path:添加环境变量为"java/jdk/bin"文件夹路径( ...
- 痞子衡嵌入式:RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计
大家好,我是痞子衡,是正经搞技术的痞子.今天给大家带来的是痞子衡的开源项目 RT-UFL. 痞子衡在近两年多的i.MXRT客户项目支持过程中,遇到的一个相当高频的问题就是制作i.MXRT下载算法.我们 ...
- C#循环判断密码
要求用户输入用户名和密码,只要不是admin.888888就一直提示用户名或密码错误,请重新输入 while (true) { Console.WriteLine("请输入帐号和密码&q ...
- Java -- "final" 的理解
Java具有继承和多态的特性,这也造就了Java语言的面向对象的灵活性.但是,过于灵活就意味的有失控的可能性. 于是,产生了final 的概念 -- 为了数据的绝对安全,无法被后期修改,英文称之为 m ...
- 使用pipenv管理python虚拟环境
前言 近期的项目中,我开始尝试着从virtualenv管理python虚拟环境,切换到用pipenv来管理. 经过一段时间的使用,着实觉得pipenv使用的更加顺手,更加的便捷.这当然也延续了 Ken ...
- 创建ABP Angular客户端(二)使用模板创建Angular前端
现在我们使用ABP CLI创建Angular客户端. 首先,进入控制台,创建一个空目录,进入这个目录,执行: abp new ZL.Test -u angular 这里我们使用与上一个系列相同的项目名 ...
- Nagios 告警配置太复杂?CA简单实现Nagios自定义多功能告警
Nagios 是一个插件式的监控系统,可以监控服务的运行状态和网络信息等,并能监视所指定的本地或远程主机参数以及服务,同时提供异常告警通知功能等.Nagios 支持客户端的数据采集,通过编写客户端插件 ...
- git , repo out off memory
解决方法,建立swap # dd if=/dev/zero of=/root/myswapfile bs=1M count=1024 1024+0 records in 1024+0 records ...
- 工作流(workflow)
1,JBPM 工作流(开源历史悠久) 2,activity 工作流(开源历史悠久) 3,workable 工作流(功能比较强大,但是开源维护缓慢,比较注重商业化) 以上三个是主流的工作流
- IDEA主题加高亮
IntelliJ Idea的黑色主题,使用就是file-->import settings 选择压缩包里的jar包,主题就被导入了,之后会提示重启,重启完就可以在设置中使用了. IDEA主题下载 ...