SSM之Spring框架--->>墨盒案例

卑微小豪發表於2020-12-04

分析:

程式中包括印表機(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包

相關文章