裝飾者模式

對象加強的手段
 
* 繼承
  被加強的對象固定的
  加強的內容也是固定的
 
* 裝飾者模式
  被加強的對象是能夠切換的
  加強的內容是固定的
 
* 動態代理(AOP)
  被加強的對象能夠切換:Service
  加強的內容也能夠切換:事務處理
 
--------------------------
 
繼承:
 
缺點:
1. 加強的內容是死的,不能動!
2. 被加強的對象也是死的!
 
使用繼承會使類增多!!!
 
class 咖啡類 {}
 
class 有糖咖啡 extends 咖啡類 {
}
 
class 加奶咖啡 extends 咖啡類 {
}
 
class 加鹽咖啡 extends 咖啡類 {
}
 
class 加糖加奶 extends 加奶 {
}
 
---------------------------
 
裝飾者模式
 
1. 加強的內容是不能修改的!
2. 被加強的對象能夠是任意的!
 
class 咖啡類 {}
 
class 有糖咖啡 extends 咖啡類 {
}
 
class 加奶咖啡 extends 咖啡類 {
}
 
class 加鹽咖啡 extends 咖啡類 {
}
 
咖啡 a = new 加糖();
咖啡 b = new 加鹽(a);//對a進行裝飾,就是給a加鹽
咖啡 c = new 加奶(b);
 
Java API
IO流!
 
四你們:
1. 字節:InputStream、OutputStream
2. 字符:Reader、Writer
 
InputStream
FileInputSteram:它是節點流!就是和一個資源綁定在一塊兒的!文件!
BufferedInputStream:它是裝飾流!建立我是必定要給我一個底層對象,而後我無論你給個人是什麼流,我都會給它添加緩衝區!
 
new BufferedInputStream(任意的InputStream)
 
FileInputStream in = new FileInputStream("F:/a.jpg");
BufferedInputStream b = new BufferedInputStream(in);
ObjectInputStream o = new ObjectInputStream(b);
 
 
--------------------------
 
Connection con = ...
 
裝飾:不知道被加強對象的具體類型時,能夠使用!
 
1. 是你還有你,一切拜託你!
 
is a
has a
use a
 
class MyConnection implements Connection {//是你
// 還有你
private Connection con;//底層對象,被加強對象
 
public MyConnection(Connection con){//經過構造器傳遞底層對象!
    this.con = con;
}
 
// 一切拜託你
public Statement createStatement() {
return con.createStatement();
}
 
// 加強點
public void close(){
把當前鏈接歸還給池!
}
}
 
Connection con = 經過四大參數建立鏈接對象!是由mysql提供的!
Connection con1 = new MyConnection(con);
 
con1.createStatement()
con.createStatement();
 
con1.close();
con.close();
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息