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)
上一篇 2022年2月4日 下午6:00
下一篇 2022年2月4日 下午6:00


相关推荐

  • 在线部署kubeedge 1.6详细教程(Ubuntu)

    在线部署kubeedge 1.6详细教程(Ubuntu)在线部署kubeedge1.6详细教程(Ubuntu与树莓派)基本环境:操作系统:centos7;Ubuntu;docker:20.10.7角色系统IPmastercentos7(amd64)172.16.0.114edgeubuntu(arm64)172.16.0.113kubeedge部署须知master以成功部署kubernetes,并且master结点处于ready状态.edge未执行kubeadmjoin命令kubeedge部署配置

    2022年7月21日
    27
  • 绘制高斯隶属函数

    绘制高斯隶属函数绘制高斯隶属函数模糊理论高斯型隶属函数实现模糊理论模糊理论以连续隶属函数理论为基础 它可以分为五个分支 模糊数学 模糊系统 不确定性和信息 模糊决策 模糊逻辑与人工智能 隶属函数是用于表示模糊集的数学工具 它表示元素属于模糊集的 真实度 隶属函数的值介于 0 和 1 之间 这似乎是概率 但它是一个不同的概念 它代表了一个程度 高斯隶属函数是其隶属函数之一 高斯型隶属函数高斯型隶属函数

    2026年3月19日
    2
  • maven中央仓库速查

    maven中央仓库速查pom 依赖速查 http maven outofmemory cn

    2026年3月19日
    2
  • int转long Long型

    int转long Long型Longl=(Long)5;以上的不行 因为Long是包装类,而int是值类型数据,两者是不能这样强转的。longl=(long)5; int和long都是基本类型的数据,是可以强转的,那么我就可以以此作为桥梁,强转成long后,再生成Long类型的数据。Longl=newLong((long)5); 这样就可以将int类型顺利转换为Long…

    2022年5月3日
    84
  • OpenClaw WebUI 的外网访问配置

    OpenClaw WebUI 的外网访问配置

    2026年3月15日
    3
  • 巧用es6数组方法,求两数组的差集!

    巧用es6数组方法,求两数组的差集!复制代码从arr1中。根据arr2中所有的项,排除过滤掉arr2中的项。letarr1=[{id:1,num:50,text:’1111111111′},{id:2,num:100,text:’222222222′},{…

    2022年5月16日
    40

发表回复

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

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