美文网首页
设计模式-装饰模式

设计模式-装饰模式

作者: Archer_J | 来源:发表于2022-01-18 13:54 被阅读0次
/**
 * 装饰模式:
 * 动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类对象(继承)更为灵活。装饰模式一种对象结构模式。
 * 通常会定义一个抽象的装饰类,然后将具体的装饰类作为他的子类,然后继承具体的装饰类。
 * <p>
 * 优点:装饰类和被装饰类可以独立发展,不会相互耦合;对于扩展一个对象的功能,装饰模式比继承更加的灵活,不会导致类的个数急剧增加。
 * 缺点:多层装饰比较复杂。
 * <p>
 * 使用场景:
 * 1、扩展一个类的功能。
 * 2、动态增加功能,动态撤销。
 * <p>
 * 设计原则:
 * 1、多用组合,少用继承。
 * 2、对扩展开放,对修改关闭。
 * <p>
 * android中应用:java中I/O便使用了装饰者模式 (InputStream)
 */
public class DecorateTest {

    public static void main(String[] args) {
        Component shoe = new Nike();
        shoe = new Color(shoe);
        shoe = new Price(shoe);
        shoe = new Size(shoe);
        // print: Nike, 白色, ¥799, 42
        System.out.println(shoe.des());
    }
}
/**
 * 装饰模式接口
 */
public interface Component {

    String des();

}
/**
 * 被装饰者(一个具体的组件)
 */
public class Nike implements Component{

    @Override
    public String des() {
        return "Nike";
    }
}
/**
 * 装饰者抽象类
 */
public abstract class ShoeDecorator implements Component {

    protected Component component;

    public ShoeDecorator(Component component) {
        this.component = component;
    }

}
**
 * 颜色装饰
 */
public class Color extends ShoeDecorator {

    public Color(Component component) {
        super(component);
    }

    @Override
    public String des() {
        return component.des() + ", 白色";
    }
}
/**
 * 价格装饰
 */
public class Price extends ShoeDecorator {

    public Price(Component component) {
        super(component);
    }

    @Override
    public String des() {
        return component.des() + ", ¥799";
    }
}
/**
 * 鞋码装饰
 */
public class Size extends ShoeDecorator {

    public Size(Component component) {
        super(component);
    }

    @Override
    public String des() {
        return component.des() + ", 42";
    }
}

相关文章

网友评论

      本文标题:设计模式-装饰模式

      本文链接:https://www.haomeiwen.com/subject/irykhrtx.html