装饰器模式 在不改变原有职责的条件下,动态的增加原有类的职责 优点,相较于继承,可以避免子类数量的膨胀。且可以相互嵌套,更加灵活。
package structuralpattern;
/**
* @author tx
* @version 1.0
* @date 2024/1/8 11:58
* @description:
* 装饰器模式
* 在不改变原有职责的条件下,动态的增加原有类的职责
* 优点,相较于继承,可以避免子类数量的膨胀。更加灵活。
*
*/
public class DecoratorPattern {
public static void main(String[] args) {
Fly fly = new Bird();
System.out.println("原始形态:");
fly.fly();
// 装饰一下小鸟
fly = new ADecorator(fly);
System.out.println("一个装饰器:");
fly.fly();
fly = new BDecorator(fly);
System.out.println("再套一个装饰器:");
fly.fly();
}
}
/**
* 抽象行为
* 飞
*/
interface Fly{
void fly();
}
/**
* 具体行为
* 小鸟飞
*/
class Bird implements Fly{
@Override
public void fly() {
System.out.println("小鸟在天上自由的翱翔!");
}
}
/**
* 飞行装饰器,
* 引入被装饰对象
*/
abstract class FlyDecorator implements Fly{
private Fly fly;
public FlyDecorator(Fly fly) {
this.fly = fly;
}
@Override
public void fly() {
fly.fly();
}
}
/**
* 飞行装饰器的实现,自由的扩展组合,
* 达到一个对方法进行增强的效果。
*/
class ADecorator extends FlyDecorator{
public ADecorator(Fly fly) {
super(fly);
}
@Override
public void fly() {
super.fly();
call();
}
private void call(){
System.out.println("小鸟叽叽喳喳!");
}
}
class BDecorator extends FlyDecorator{
public BDecorator(Fly fly) {
super(fly);
}
@Override
public void fly() {
super.fly();
call();
}
private void call(){
System.out.println("小鸟lababa----------");
}
}