common-upload上傳文件功效封裝類分享。本站提示廣大學習愛好者:(common-upload上傳文件功效封裝類分享)文章只能為提供參考,不一定能成為您想要的結果。以下是common-upload上傳文件功效封裝類分享正文
面試被問及到js中的不雅察者形式,這玩藝兒早就懂得過,可以說是靜態說話中異常有效的一個設計形式,異常忸捏的沒有體系的研討過。不外沒緊要,哪裡不會補哪裡,連忙著手,用所會的說話都完成一遍。
不雅察者形式
關於不雅察者形式,《松本行弘的法式世界》講的異常清晰:不雅察者形式是當某個對象狀況產生變更時,依存於該狀況的全體對象主動獲得告訴,被不雅察者和不雅察者們是一對多的關系。書中還舉了一個異常易懂的例子:獲得體系以後時光並輸入到敕令行中。假如要硬編碼也很簡略,界說一個辦法,先獲得時光,然後再處置展現。如許獲得時光的功效根本就不克不及復用了,由於帶了個處置展現的拖油瓶。
假如用不雅察者形式則可以如許:界說兩個類,一個用於計時,獲得以後時光;另外一個用於展現時光。展現時光的類就是不雅察者,如許做的利益是下降互相的依附性。第一個類轉變後不須要處置任何事物,只須要收回告訴告知它的不雅察者們,詳細事物由它們處置。好比有一天我們想換種情勢展現時光,或許用多種方法展現時光,完整不須要牽扯到第一個類。
PS:《松本行弘的法式世界》真是一本好書。起先是想把這本書當作ruby教程來讀的,後來發明基本不是,書頂用異常易懂的說話深刻淺出的疏解白了許多深邃的哲學思惟。固然這本書對我這類剛入門的菜鳥來講簡直沒有甚麼適用價值,然則讀完以後有種名頓開的感到,是一次異常好的浏覽體驗。
ruby完成
用ruby完成不雅察者形式的確簡略清楚的使人發指,上代碼:
require "observer"
#被不雅察者
class Subject
include Observable
def notify
#do sth
changed #更新標記為真
notify_observers(*args) #假如更新標記為真,挪用不雅察者帶參數args的辦法
end
end
#不雅察者
class Obs
#回調函數,似乎只能這麼叫
def update
#do sth
end
end
#實例
sub = Subject.new
sub.add_observer(Obs.new)
sub.notify
沒錯,就是這麼簡略。。。
重要是依附Observer模塊,除下面用到的,此模塊還有以下接口:
1.delete_observer(obj) 刪除特定的不雅察者
2.delete_observers 刪除全體不雅察者
3.count_observers 獲得不雅察者數量
4.changed? 檢討更新標記
php完成
php完成起來也不費事:
//被不雅察者
class Subject
{
private $_observers;
public function __construct() {
$this->_observers = array();
}
public function add_observer($obs) {
$this->_observers[] = $obs;
}
public funtion delete_observer($bos) {
$index = array_search($bos, $this->_observers);
unset($this->_observers[$index]);
}
public function notify_observers() {
foreach($this->_observers as $v) {
$v->update();
}
}
}
//不雅察者
class Observer
{
public function __construct() {
do sth;
}
public function update() {
do sth;
}
}
//實例
$sub = new Subject();
$obs = new Observer();
$sub->add_observer($obs);
$sub->notify_observers();
js完成
js完成起來也不費事,就是得寫些對象函數便利用,好比刪除數組指定的元素。上面只用最簡略的完成辦法。
//被不雅察者
function Subject() {
var _this = this;
this.observers = [];
this.addObserver = function(obj) {
_this.observers.push(obj);
}
this.deleteObserver = function(obj) {
var length = _this.observers.length;
for(var i = 0; i < length; i++) {
if(_this.observers[i] === obj) {
_this.observers.splice(i, 1);
}
}
}
this.notifyObservers = function() {
var length = _this.observers.length;
console.log(length)
for(var i = 0; i < length; i++) {
_this.observers[i].update();
}
}
}
//不雅察者
function Observer() {
this.update = function() {
alert(1)
}
}
var sub = new Subject();
var obs = new Observer();
sub.addObserver(obs);
sub.notifyObservers();
var sub = new Subject();
結論:ruby可讓我們專注於法式設計自己,而不是法式的語法和特征。js靈巧多變,是一門完整的編程說話除生孩子甚麼都能完成,就是玩起來要下點工夫。php嘛,中規中矩,沒啥好說的。
這仨法式都跑起來後算是完全明確這個設計形式了。
�分歧
public List<FileBean> getFileBeanList() {
return fileBeanList;
}
public void setFileBeanList(List<FileBean> fileBeanList) {
this.fileBeanList = fileBeanList;
}
public HttpServletRequest getRequest() {
return request;
}
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public String getSavePath() {
return savePath;
}
public void setSavePath(String savePath) {
this.savePath = savePath;
}
public Map<String, String> getFormDatas() {
return formDatas;
}
public void setFormDatas(Map<String, String> formDatas) {
this.formDatas = formDatas;
}
public String getUploadStatus() {
return uploadStatus;
}
public void setUploadStatus(String uploadStatus) {
this.uploadStatus = uploadStatus;
}
public long getMaxSize() {
return maxSize;
}
public void setMaxSize(long maxSize) {
this.maxSize = maxSize;
}
public String getAllowExts() {
return allowExts;
}
public void setAllowExts(String allowExts) {
this.allowExts = allowExts;
}
public String getUnAllowExts() {
return unAllowExts;
}
public void setUnAllowExts(String unAllowExts) {
this.unAllowExts = unAllowExts;
}
}
應用對象類
// 實例化上傳對象類
UploadTools uploadTools = new UploadTools();
uploadTools.setSavePath(savePath);
uploadTools.setRequest(wu.request);
uploadTools.uploadFiles();
Map<String, String> fds = uploadTools.getFormDatas();
List<FileBean> fileBeanList =uploadTools.getFileBeanList();