javaWeb筆記(二) 裝飾者模式 以及我的理解

對象增強的手段

  • 繼承
    被增強的對象固定的
    增強的內容也是固定的
  • 裝飾者模式
    被增強的對象是可以切換的
    增強的內容是固定的
  • 動態代理(AOP)
    被增強的對象可以切換:Service
    增強的內容也可以切換:事務處理

繼承:

缺點:
1. 增強的內容是死的,不能動!
2. 被增強的對象也是死的!

使用繼承會使類增多!!!

----------對象增強  繼承和裝飾者模式的區別-----------

*對象增強
不能只用繼承
因爲有些繼承的類,它本身是對接口的實現類
這個實現類在這個環境叫這個名字
在另一個環境就變了
當你在另一個環境的時候還需要對這個接口的專門實現類進行繼承
這就做了無用功。
所以裝飾者模式出現 是你還有你,一切拜託你 Wrpper***

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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章