現在是星期六早上的1:43,看了一些前輩職場分享文之後,正在思考所謂的
技術的本質
是什麼。可能只有摸到一點輪廓,但是可以分享一些我自己的想法,雖然大家在coding中都是孤軍奮戰,但是最後還是會回到跟人的本質
有關的議題上面。
因為人的本質是不變的、所以技術的本質也不會改變。
從最容易明白的UI、UX設計,就是為了要符合人的使用特性。我們寫code的方式,也越來越符合人的使用特性,從在紙條上面打洞,進化到機械語言、組合語言,C語言、C++,Java、C#、python、javascript,以及各種流派OO coding、fundamental coding、design pattern、響應式編程,或是各種框架和功能性的庫,最終最終都是要讓使用的人能夠更加舒適快速的開發出合適的軟體。
因此我們在設計時也要隨時從人的角度
去思考,包含系統設計、流程,最後細節來到code的易讀程度
、是否容易擴充、變數命名方式等等...。
最終技術的本質還是回到面對態度是否正確上。
從小事情培養,把做一件事情的態度延伸到做所有事情的態度,我認為這種自我認知,才會是技術的本質。
代理模式(Proxy),為其他物件提供一種代理以控制對這個物件的存取。
-- 大話設計模式 p.95
應用非常廣泛,也被稱作委任模式
,我們最常接觸的就是代理上網了,請律師幫忙打官司也是代理的一種,買房子幫忙斡旋也是,在現實生活中的應用也很普遍呢!
代理和真實的主題都實做了抽象主題類別,在代理中有一個真實主題來作轉換。(是不是跟Adapter很像?,但差別是Adapter中的Adaptee並沒有實作Target)。
假設我們要買房子找一個房仲幫忙我們處理各種瑣事。
買房子的介面
public interface IBuyHouse {
// 找適合的房子
public void findHouse();
// 跟屋主說太貴
public void priceTooHigh();
// 屋主防禦價錢
public void defendPrice();
// 成交後,簡化從付訂金到交屋的過程。
public void finish();
}
實際想買房子的人是我們
public class LittleEngineer implements IBuyHouse {
@Override
public void findHouse() {
// 小小工程師想找在民生社區的房子
System.out.println("民生社區機能特好!當然找那邊的房子!");
}
@Override
public void priceTooHigh() {
// 價錢實在太貴
System.out.println("現在台灣薪水那麼低,屋主開那麼高賣不掉啦!");
}
@Override
public void defendPrice() {
// 屋主反擊說價錢已經很便宜
System.out.println("未來人口越來越少,我們也是自住而已!打我五折吧!");
}
@Override
public void finish() {
// 沒想到屋主同意買到了
System.out.println("辛苦還房貸幾十年");
}
}
幫忙代理的房仲從中協調
public class EstateAgent implements IBuyHouse {
private IBuyHouse iBuyHouse;
public EstateAgent(IBuyHouse iBuyHouse){
this.iBuyHouse = iBuyHouse;
}
@Override
public void findHouse() {
iBuyHouse.findHouse();
System.out.println("#房仲幫忙找房子");
}
@Override
public void priceTooHigh() {
iBuyHouse.priceTooHigh();
System.out.println("#房仲幫忙喬價錢");
}
@Override
public void defendPrice() {
iBuyHouse.defendPrice();
System.out.println("#房仲強力喬價錢");
}
@Override
public void finish() {
System.out.println("#成交的話房仲幫忙付訂、簽約、用印、完稅、交屋");
iBuyHouse.finish();
}
}
Client使用方式 (Test)
public class Test {
@org.junit.jupiter.api.Test
public void test(){
IBuyHouse littleEngineer = new LittleEngineer();
IBuyHouse estateAgent = new EstateAgent(littleEngineer);
estateAgent.findHouse();
estateAgent.priceTooHigh();
estateAgent.defendPrice();
estateAgent.finish();
}
}
呈現結果
民生社區機能特好!當然找那邊的房子!
#房仲幫忙找房子
現在台灣薪水那麼低,屋主開那麼高賣不掉啦!
#房仲幫忙喬價錢
未來人口越來越少,我們也是自住而已!打我五折吧!
#房仲強力喬價錢
#成交的話房仲幫忙付訂、簽約、用印、完稅、交屋
辛苦還房貸幾十年
成功使用Proxy pattern,找到一個代理人來幫忙我們處理買房子會遇到的找房子、與屋主溝通,和各種麻煩瑣事。
今天先研究到這邊,如果有什麼問題或意見歡迎留言、私訊喔~