美文网首页
设计模式之装饰器模式

设计模式之装饰器模式

作者: GitCode8 | 来源:发表于2019-03-12 10:42 被阅读0次

    装饰器模式允许向现有对象添加新的功能,又不改变其结果。其实子类也可以实现同样的功能,但随着功能的增多,子类非常膨胀,导致臃肿难以维护。
    下面我定义一个百货店接口,和两个具体类,分别负责卖笔和纸。

    public interface Store {
    
        void sellPaper();
    
        void sellPen();
    }
    public class PenStore implements Store {
        @Override
        public void sellPaper() {
            System.out.println("我们是笔店,不卖纸");
        }
    
        @Override
        public void sellPen() {
            System.out.println("我们是笔店,卖各种笔");
        }
    }
    
    public class PaperStore implements Store {
        @Override
        public void sellPaper() {
            System.out.println("我们是纸店,卖各种纸");
        }
    
        @Override
        public void sellPen() {
            System.out.println("我们是纸店,不卖笔");
        }
    }
    

    然后我们定义一个修饰类,继承百货店,使其修饰百货店,具有百货店的功能。

    public abstract class StoreDecorator implements Store {
        public Store store;
    
        public StoreDecorator(Store store) {
            this.store = store;
        }
    
    
        @Override
        public void sellPaper() {
            store.sellPaper();
        }
    
        @Override
        public void sellPen() {
            store.sellPen();
        }
    }
    

    接着我们接着修饰类的具体子类,也就是我们要添加的功能。

    public class SupermarketDecorator extends StoreDecorator {
    
        public SupermarketDecorator(Store store) {
            super(store);
        }
    
    
        @Override
        public void sellPaper() {
            store.sellPaper();
            sellEraser();
        }
    
        @Override
        public void sellPen() {
            store.sellPen();
            sellEraser();
        }
    
        public void sellEraser(){
            System.out.println("还卖橡皮擦");
        }
    }
    
    

    看看允许效果

    public class Main {
    
        public static void main(String[] args) {
    
            Store store=new PenStore();
    
            Store market=new SupermarketDecorator(store);
    
            market.sellPen();
    
    
        }
    
    }
    运行结果
    
    我们是笔店,卖各种笔
    还卖橡皮擦
    

    相关文章

      网友评论

          本文标题:设计模式之装饰器模式

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