zoukankan      html  css  js  c++  java
  • Decorator(装饰者)模式

    1.Decorator模式解决什么问题?
    2.实现Decorator模式
    3.小结

    #Decorator模式解决什么问题?
    定义:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

    java.io包也是基于此模式组织代码,学习Decorator代码能帮助理解IO包

    #实现Decorator模式
    为了练手,我们来模拟电脑外设接入电脑主机,也就是用外设来装饰电脑

    首先定义一个Computer的抽象类

    package com.mike.pattern.decorator.eg1;
    
    /**
     * @author mike
     * @date 2020-11-24
     * @desc 定义被装饰者
     */
    public abstract class Computer {
    	public abstract void connectingDevices();
    }
    
    

    被装饰者具体实现及初始信息

    package com.mike.pattern.decorator.eg1;
    
    /**
     * @author mike
     * @date 2020-11-24
     * @desc 定义被装饰者具体实现
     */
    public class Desktop extends Computer {
    	public void connectingDevices() {
    		System.out.println("当前未连接任何外接设备");
    	}
    }
    
    

    装饰者

    package com.mike.pattern.decorator.eg1;
    
    /**
     * @author mike
     * @date 2020-11-24
     * @desc 定义装饰者
     */
    public abstract class Decorator extends Computer {
    	public Computer computer;
    	public Decorator(Computer computer) {
    		this.computer = computer;
    	}
    
    	public void connectingDevices() {
    		computer.connectingDevices();
    	}
    }
    
    

    鼠标装饰类

    package com.mike.pattern.decorator.eg1;
    
    /**
     * @author mike
     * @date 2020-11-23
     * @desc 定义鼠标装饰
     */
    public class DecoratorMouse extends Decorator {
    	public DecoratorMouse(Computer computer) {
    		super(computer);
    	}
    
    	@Override
    	public void connectingDevices() {
    		super.connectingDevices();
    		System.out.println("鼠标已经链接");
    	}
    }
    
    

    键盘装饰类

    package com.mike.pattern.decorator.eg1;
    
    /**
     * @author mike
     * @date 2020-11-23
     * @desc 定义键盘装饰器
     */
    public class DecoratorKeybord extends Decorator {
    	public DecoratorKeybord(Computer computer) {
    		super(computer);
    	}
    
    	@Override
    	public void connectingDevices() {
    		super.connectingDevices();
    		System.out.println("键盘已经链接");
    	}
    }
    
    

    测试类

    package com.mike.pattern.decorator.eg1;
    
    /**
     * @author mike
     * @date 2020-11-23
     * @desc 测试装饰
     */
    public class Test {
    	public static void main(String[] args) {
    		Desktop desktop = new Desktop();
    		Decorator decorator = new DecoratorKeybord(new DecoratorMouse(desktop));
    		decorator.connectingDevices();
    	}
    }
    
    

    输出

    #小结
    学习设计模式最好的办法是先打好基础,尤其是有关,抽象类,接口方面的知识,加上多使用IDE断点调试功能,分析代码调用链,别人的文章只能给你指路,设计模式属于只能意会没法言传的一类知识,自己多思考,多敲代码才能体会其思想。

    参考文章:https://blog.csdn.net/jason0539/article/details/22713711

  • 相关阅读:
    Python爬虫爬取网页图片
    Python爬虫爬取贴吧的帖子内容
    Android导入AS工程
    Arcgis for Silverlight学习(一)
    Silverlight学习笔记之页面跳转
    视频信号的垂直消隐和水平消隐[转]
    【DM642学习笔记八】色度重采样
    java从入门到卖肠粉系列
    [Selenium] Automation Test Manual(Selenium)
    [Selenium] Selenium私房菜(新手入门教程)
  • 原文地址:https://www.cnblogs.com/gy1010/p/14026926.html
Copyright © 2011-2022 走看看