美文网首页
JAVA设计模式—装饰者模式上手指南

JAVA设计模式—装饰者模式上手指南

作者: 6faef730638b | 来源:发表于2017-04-08 23:45 被阅读18次

    设计模式:装饰模式

    装饰者模式常在代码中以Decorator,Wraaper的样子出现其用意是保持接口并增加对象的职责,在项目交互中有些代码我们尽量不要删除和修改,最好进行扩展有利于开发的容错率


    在控件中的使用

    UML

    正如UML所示我们可以清晰的明白这个模式的作用方式
    接下来我用代码来说明这幅图
    首先是原生类的方法接口与实现

    public interface AddtionAction {//原生类方法接口
        void action(Context context);
    }
    
    public class ConcreatAdditionAction implements AddtionAction {//原生类方法接口实现
       @Override
       public void action(Context context) {
           Toast.makeText(context,"自身ACTION",Toast.LENGTH_SHORT).show();
       }
    }
    

    接着原生类

    public class Decorator {
        private AddtionAction addtionAction;
        private Context context;
        public Decorator(Context context,AddtionAction addtionAction) {
            this.context=context;
            this.addtionAction=addtionAction;
        }
        void action(){
            addtionAction.action(context);
        }
    }
    

    装饰类接口

    public interface AddBehavior {//装饰类方法接口
        void  addBehavior();
    }
    

    装饰类

    public class DecoratorWrapper extends Decorator implements AddBehavior{
    
        private Context context;
    
        public DecoratorWrapper(Context context,AddtionAction addtionAction) {
            super(context,addtionAction);
            this.context=context;
        }
    
        @Override
        void action() {
            super.action();
            addBehavior();
        }
    
        @Override
        public void addBehavior() {
            Toast.makeText(context,"扩展的ACTION",Toast.LENGTH_LONG).show();
        }
    }
    

    我们在实例化装饰类的时候将其方法接口传入构造函数即可往其方法中扩展

    Decorator decorator=new DecoratorWrapper(this,new ConcreatAdditionAction());
    decorator.action();
    
    原生类方法 装饰类方法

    最后两个方法先后调用了,方法扩展成功,今天到这里就结束了,讲道理这个模式随处可见,多熟悉熟悉下次一些特定场景下多用用设计模式终归是好的

    关于作者

    CodeMonkey(大四在校学生,正在校外实习中,经验1年)
    QQ:568261070
    GitHub:https://github.com/MrCodeSniper

    相关文章

      网友评论

          本文标题:JAVA设计模式—装饰者模式上手指南

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