Java 装饰模式 (Decorator)「建议收藏」

Java 装饰模式 (Decorator)

大家好,又见面了,我是全栈君。

装饰模式

动态的将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的取代方案

这里写图片描写叙述

代码

package gx.component;

/** * 组件:装饰类和被装饰类 都要继承:为了类型保持一致 * @author always * */
public abstract class Component {

    public abstract void description();
    public abstract int cost();
}

package gx.component.impl;

import gx.component.Component;


/** * 装饰类的抽象类 * @author always * */
public abstract class Decorator extends Component{

    protected Component component;
}
package gx.component.impl;

import gx.component.Component;

/** * * 被包装的类 * @author always * */
public class Phone extends Component{

    public void description() {
        System.out.println("裸机");
    }

    public int cost() {

        return 1900;
    }


}
package gx.decorator.impl;

import gx.component.Component;
import gx.component.impl.Decorator;

/** * * 装饰1:给手机买个壳 * @author always * */
public class DaiKe extends Decorator{

    public DaiKe(){

    }

    public DaiKe(Component component){
        this.component=component;
    }
    public void description() {
        this.component.description();
        System.out.println("带了手机壳");
    }

    public int cost() {
        return 50+this.component.cost();
    }

}
package gx.decorator.impl;

import gx.component.Component;
import gx.component.impl.Decorator;

/** * * 装饰2:给手机贴个膜 * @author always * */
public class TieMo extends Decorator{

    public TieMo(){}

    public TieMo(Component component){
        this.component=component;
    }

    public void description() {
        this.component.description();
        System.out.println("贴了膜");
    }

    public int cost() {
        return 20+this.component.cost();
    }

}

測试类:

package gx;

import gx.component.Component;
import gx.component.impl.Phone;
import gx.decorator.impl.DaiKe;
import gx.decorator.impl.TieMo;
import junit.framework.TestCase;

public class TestDecorator extends TestCase {

    public void testDecorator() {

        Component component = new TieMo(new DaiKe(new Phone()));

        component.description();
        System.out.println("价钱:" + component.cost());
        /* * 结果: * 裸机 * 带了手机壳 * 贴了膜 * 价钱:1970 */
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115420.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dos命令中DATE:~0,10输出日期格式名称格式/改为-

    dos命令中DATE:~0,10输出日期格式名称格式/改为-1、问题原因系统日期格式为/分隔,dos命令中%DATE:~0,10%的日期将会被当作多个文件夹处理2、解决方法1)、在控制面板中时钟、语言和区域中或者桌面右下角调整日期和时间格式,更改日历设置,日期格式由原来是yyyy/M/d改成yyyy-M-d2)、通用写法(年月日分开取):%DATE:~0,10%替换为%date:~0,4%%date:~5,2%%date:~8,2%3)、提前变…

    2026年1月30日
    5
  • python趣味编程100例pdf(python简单实例)

    1#题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?代码:23h=04li=[]5foriinrange(1,11):6s=100/(2**(i-1))7li.append(s)89forxinli:10h+=x11print(li)12print(…

    2022年4月17日
    223
  • word2vec的原理及实现(附github代码)

    word2vec的原理及实现(附github代码)目录一、word2vec原理二、word2vec代码实现(1)获取文本语料(2)载入数据,训练并保存模型①#输出日志信息②#将语料保存在sentence中③#生成词向量空间模型④#保存模型(3)加载模型,实现功能(4)增量训练最近要用到文本词向量,借此机会重温一下word2vec。本文会讲解word2vec的原理和代码实现。本…

    2022年5月17日
    40
  • 回溯法求解N皇后问题及其时间复杂度分析

    回溯法求解N皇后问题及其时间复杂度分析回溯法求解N皇后问题及其时间复杂度分析一、回溯法简介1.什么是回溯法?2.回溯法的时间复杂度分析蒙特卡罗方法蒙特卡罗方法在回溯法求解时间复杂度中的应用二、回溯法求解N皇后问题1.回溯法求解N皇后问题的过程2.回溯法求解N皇后问题的时间复杂度2.1求解时的效率分析回溯法进行效率分析的代码2.2时间复杂度分析一、回溯法简介1.什么是回溯法?  相信”迷宫”是许多人儿时的回忆,大家小时候一定都玩过迷宫游戏。我们从不用别人教导,都知道走迷宫的策略是:当遇到一个岔路口,会有以下两种情况:存

    2022年9月30日
    5
  • linux+shell脚本100,shell脚本(shell编程100例)

    linux+shell脚本100,shell脚本(shell编程100例)ShellScript,Shell脚本与Windows/Dos下的批处理类似,也便是用各类指令预先放入到一个文件中,便利一次性执行的一个程序文件,主要是便利办理员进行设置或许办理用的。可是它比Windows下的批处理更强大,比用其他编程程序修改的程序功率更高,它使用了Linux/Unix下的指令。shell编程100例1、编写helloworld脚本#!/bin/bash#编写helloworld…

    2022年10月3日
    3
  • 用flash做古诗动画_《古诗三首》Flash动画课件[通俗易懂]

    用flash做古诗动画_《古诗三首》Flash动画课件[通俗易懂]《古诗三首》Flash动画课件古诗词三首牧童[唐]吕岩草铺横野六七里,笛弄①晚风三四声。归来饱饭黄昏后,不脱蓑衣②卧月明。注释①弄:逗弄。②蓑衣:棕或草编的外衣,用来遮风挡雨。………舟过安仁①[宋]杨万里一叶渔船两小童,收篙②停棹③坐船中。怪生④无雨都张伞,不是遮头是使风。注释①安仁:县名。在湖南省东南部,宋时设县。②篙:撑船用的竹竿或木杆。③棹:船桨。④怪生:怪不得。……

    2022年5月5日
    84

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号