package entiey; public interface Ink { /** * 定義打印採用的顏色的方法 * r(紅色) * g(綠色) * b(藍色) */ public String getColor(int r,int g,int b); }
package entiey; public interface Paper { /** * 紙張接口 */ public static final String newine="\r\n"; //輸入一個字符到紙張 public void putInChar(char c); //獲得輸出到紙張上的內容 public String getContent(); }
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()); } }
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文件內容以下: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); } }
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 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>
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);
}
}