美文网首页
日更(二十四)-Android-装饰模式

日更(二十四)-Android-装饰模式

作者: Jlanglang | 来源:发表于2019-01-24 21:03 被阅读0次

    瞎扯

    由于最近都在写react.
    写android其实也没定个计划.(我觉得这样比较有挑战)
    基本每天写的时候才想主题.
    就按顺序,先把我理解的设计模式都写一遍吧.哈哈.

    装饰模式

    我还记得我学java基础的时候,老师讲过这个模式.
    当时完全听不进去.不知道讲的什么

    我写文章的时候也在想,我写给自己看,还是写给别人看,
    太小白的是不是完全不知道在说什么.
    不过也没办法.我觉得这个只能慢慢来,经历和思想境界到了就通了.


    装饰模式,顾名思义

    在原有的基础上添加新的内容.变成一个新的类似的东西.

    这个模式很常用.

    因为能在不改变原有逻辑的情况下,添加额外的功能.

    比如定义一个类

    public class Test {
        public void test() {
            Man man = new Man();
            CodeFarmer manDoctor = new CodeFarmer(man);//男码农
    
            Woman woman = new Woman();
            CodeFarmer womanDoctor = new CodeFarmer(woman);//女码农
        }
    
        /**
         * 人
         */
        public interface Person {
            String sex();
    
            int age();
        }
    
        /**
         * 女人
         */
        public class Woman implements Person {
    
            @Override
            public String sex() {
                return "女";
            }
    
            @Override
            public int age() {
                return 0;
            }
        }
    
        /**
         * 男人
         */
        public class Man implements Person {
    
            @Override
            public String sex() {
                return "男";
            }
    
            @Override
            public int age() {
                return 0;
            }
        }
    
        /**
         * 码农
         */
        public class CodeFarmer implements Person {
            private Person person;
    
            public CodeFarmer(Person person) {
                this.person = person;
            }
    
            @Override
            public String sex() {
                return person.sex();
            }
    
            @Override
            public int age() {
                return person.age();
            }
    
            public String toString() {
                return "我是" + person.sex() + "码农";
            }
        }
    }
    

    人=>男人|女人

    码农=>人+因为会敲代码,所以叫码农

    码农=>(男人|女人)+会敲代码

    码农也是人.

    所以也是实现Person 接口.


    装饰模式大致就是这个样子.

    装饰类与被装饰的对象,都继承同一个接口.保证装饰后还是同一个的类型.


    装饰可以有几次,可以多次装饰吗?

    当然可以,

     /**
         * 高级码农
         */
        public class SeniorCodeFarmer implements Person {
            private Person person;
    
            public SeniorCodeFarmer(Person person) {
                this.person = person;
            }
    
            @Override
            public String sex() {
                return person.sex();
            }
    
            @Override
            public int age() {
                return person.age();
            }
    
            public String toString() {
                return "我是" + person.sex() + "高级码农";
            }
        }
    
     public void test() {
            Man man = new Man();
            CodeFarmer manCodeFarmer = new CodeFarmer(man);//男码农
    
            Woman woman = new Woman();
            CodeFarmer womanCodeFarmer= new CodeFarmer(woman);//女码农
    
            SeniorCodeFarmer manSenior = new SeniorCodeFarmer(womanCodeFarmer);//男高级
            SeniorCodeFarmer manSenior1 = new SeniorCodeFarmer(man);//女高级
            SeniorCodeFarmer woManSenior= new SeniorCodeFarmer(womanCodeFarmer);//女高级
            SeniorCodeFarmer woManSenior1 = new SeniorCodeFarmer(woManSenior);//女高级
        }
    

    可以直接变成高级码农.也可以变成码农再变成高级码农.
    但本质上.装饰的都是同一个人.
    也就是不管装饰了多少次.
    其根源,还是第一次的那个人

    从面向对象角度讲:

    装饰模式讲究的是扩展,而不是修改.不会轻易去象改变装饰对原有的属性.

    设计模式从现实的角度去理解.就比较容易学.

    交流群:493180098,这是个很少吹水,交流学习的群.
    APP开发维护咨询群 : 492685472 ,承接APP迭代.开发维护.咨询业务,付费快速解决问题.

    相关文章

      网友评论

          本文标题:日更(二十四)-Android-装饰模式

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