zoukankan      html  css  js  c++  java
  • 设计模式---装饰模式

    今天学习了装饰模式,做个笔记。。装饰模式的基础概念可以参考:https://blog.csdn.net/cjjky/article/details/7478788

    这里,就举个简单例子

    孙悟空有72变,但是它平时是猴子,遇到情况下,它可以变成蝴蝶等等

    因此提供的对象接口为:SunWukong

    package com.designmodel.decorator;
    
    public interface SunWukong {
    
        void change();
    }

    然后是一个具体的对象:Monkey

    package com.designmodel.decorator;
    
    public class Monkey implements SunWukong {
    
        public void selfIntroduce() {
            System.out.println("我是孙悟空, 我有72变");
        }
        
        @Override
        public void change() {
            System.out.println("我变");
        }
    
    }

    接下来是装饰抽象类:Transformations

    package com.designmodel.decorator;
    
    public class Transformations implements SunWukong {
    
        private SunWukong swk;
        
        public Transformations(SunWukong swk) {
            super();
            this.swk = swk;
        }
    
        @Override
        public void change() {
            swk.change();
        }
    
    }

    最后是两个具体的装饰对象:

    package com.designmodel.decorator;
    
    public class XiangFei extends Transformations  {
    
        public XiangFei(SunWukong swk) {
            super(swk);
        }
        
        public void nowIs() {
            System.out.println("我现在变成了香妃");
        }
    }
    package com.designmodel.decorator;
    
    public class ButterFly extends Transformations {
    
        public ButterFly(SunWukong swk) {
            super(swk);
        }
    
        public void nowIs() {
            System.out.println("我现在变成了蝴蝶");
        }
    }

    客户端测试:

    package com.designmodel.decorator;
    
    public class MainApp {
    
        public static void main(String[] args) {
    
            Monkey monkeyKing = new Monkey();
            monkeyKing.selfIntroduce();
            System.out.println("我要变了...");
            XiangFei xf = new XiangFei(monkeyKing);
            xf.nowIs();
         System.out.println("我继续变...");
         ButterFly bf = new ButterFly(monkeyKing);
         bf.nowIs(); } }

    输出结果:

    我是孙悟空, 我有72变
    我要变了...
    我现在变成了香妃
    我继续变...
    我现在变成了蝴蝶

    装饰模式就是这个意思。。。

  • 相关阅读:
    【C#/WPF】限制GridSplitter分隔栏的滑动范围
    【C#】访问泛型中的List列表数据
    【C#学习笔记】反射的简单用法
    【C#】获取泛型<T>的真实类型
    【Unity】关于发射子弹、导弹追踪的逻辑
    【转】【Unity】四元数(Quaternion)和旋转
    【Unity】UGUI的Text各种小问题
    【火狐FireFox】同步失败后,书签被覆盖,如何恢复书签
    【转】【Unity】实现全局管理类的几种方式
    【Unity】动态调用其他脚本的函数
  • 原文地址:https://www.cnblogs.com/miantiaoandrew/p/9077872.html
Copyright © 2011-2022 走看看