如何增强方法?
1.修改源代码
弊端:如果类比较多,修改起来比较麻烦
public class Dog{
public void eat(){
System.out.println("狗长在肯骨头");
}
public void bark(){
System.out.println("狗在汪汪汪的叫");
}
}
增强后:
public class Dog{
public void eat(){
System.out.println("eat方法被增强开始");
System.out.println("狗长在肯骨头");
System.out.println("eat方法被增强结束");
}
public void bark(){
System.out.println("bark方法被增强开始");
System.out.println("狗在汪汪汪的叫");
System.out.println("bark方法被增强结束");
}
}
改进可以使用继承
public class DogSon extends Dog{
public void eat(){
System.out.println("eat方法被增强开始");
System.out.println("狗长在肯骨头");
System.out.println("eat方法被增强结束");
}
public void bark(){
System.out.println("bark方法被增强开始");
System.out.println("狗在汪汪汪的叫");
System.out.println("bark方法被增强结束");
}
}
public class TestDog {
public static void main(String[] args) {
Dog dog=new DogSon();
dog.eat();
dog.bark();
}
}
装饰模式
过滤流使用了装饰模式
装饰模式的实现步骤
- 定义一个接口
public interface Animal { void eat(); void bark(); }
- 定义一个Dog类实现该接口
-
public class Dog implements Animal{ public void eat(){ System.out.println("狗长在肯骨头"); } public void bark(){ System.out.println("狗在汪汪汪的叫"); } }
- 定义装饰类
public class Zhuangshi implements Animal{ private Animal animal; //通过构造方法传入被装式的对象 public Zhuangshi(Animal animal){ this.animal=animal; } public void eat() { System.out.println("增强set方法开始"); animal.eat(); System.out.println("增强set方法结束"); } public void bark() { System.out.println("增强bark方法开始"); animal.bark(); System.out.println("增强bark方法结束"); } } public class TestZhuangshi { public static void main(String[] args) { Dog dog=new DogSon(); Cat cat=new Cat(); Zhuangshi zs=new Zhuangshi(cat); zs.eat(); zs.bark(); } }