• 装饰模式(设计模式_06)


    装饰模式,可以动态给对象增加一些额外的职责,比子类更加灵活,通常使用继承来实现扩展性,继承的子类越来越多,会增加复杂性,装饰模式的特点是:装饰者与被装饰者拥有共同的超类,继承的目的是继承类型。

    以下用一个案例来实现装饰模式:

    // 定义装饰接口
    public interface IDecoration {
    
        // 定义显示show装饰的方法
        public void show();
    
    }
    
    // 定义装饰者
    public abstract class Decoration implements IDecoration {
    
        private IDecoration iDecoration;
    
        public Decoration(IDecoration iDecoration) {
            this.iDecoration = iDecoration;
        }
    
        public void show() {
            iDecoration.show();
        }
    
    }
    
    // 定义第一个被装饰者,装饰者会很多很多
    public class DecorationA extends Decoration{
    
        public DecorationA(IDecoration iDecoration) {
            super(iDecoration);
            // TODO Auto-generated constructor stub
        }
    
        public void show() {
            super.show();
            System.out.println("DecorationA show()...");
        }
    }
    
    // 定义第二个被装饰者
    public class DecorationB extends Decoration{
    
        public DecorationB(IDecoration iDecoration) {
            super(iDecoration);
            // TODO Auto-generated constructor stub
        }
    
        public void show() {
            super.show();
            System.out.println("DecorationB show()...");
        }
    
    }
    
    // 定义一个人,直接实现 被装饰者的 共同超类
    public class Person implements IDecoration{
    
        public void show() {
            System.out.println("Person show()...");
        }
    
    }
    
    // 客户端程序
    public class Main {
    
        public static void main(String [] args) {
    
    
            // 会发现这里的写法,和IO有很相似
            Decoration decoration = new DecorationA(
                                                    new DecorationB(
                                                                    new Person() 
                                                                                ));
    
            decoration.show();
    
        }
    
    }

    运行结果:
    这里写图片描述

    装饰模式的好处:有装饰者与被装饰者有共同的超类

    谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,
    刘德利CSDN博客, http://blog.csdn.net/u011967006

  • 相关阅读:
    颠覆C#王权的“魔比斯环” — 实现AOP框架的终极利器
    使用.Net的CodeDOM技术实现语言无关的Code Wizard
    拆半查找的递归和非递归算法
    使用wxWidgets for C++从资源文件中静态装载图像
    全排列算法原理和实现
    得到第K个大的数算法研究
    用C#2.0实现网络蜘蛛(WebSpider)
    Php实现Js的escape方法
    google map 获取 地理定位
    将sqlserver表中的数据导出sql语句(转)
  • 原文地址:https://www.cnblogs.com/android-deli/p/10322229.html
Copyright © 2020-2023  润新知