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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎样在SharePoint管理中心检查数据库架构版本号、修补级别和修补程序的常规监控

    怎样在SharePoint管理中心检查数据库架构版本号、修补级别和修补程序的常规监控

    2021年12月5日
    39
  • vue中使用animate css

    vue中使用animate cssvue2使用animatecss安装安装的方式有很多种1.在html文件中直接引用从github上下载的资源<linkrel="stylesheet"href="vue2-animate.min.css">2.如果使用webpack并且用对了css-loader可以使用npm安装npm安装包依赖npminstall–savevue2-animate3…

    2022年7月27日
    5
  • java栈内存初始化,阿里面试官:小伙子,你给我说一下JVM对象创建与内存分配机制吧…

    java栈内存初始化,阿里面试官:小伙子,你给我说一下JVM对象创建与内存分配机制吧…内存分配机制逐步分析类加载检查:虚拟机遇到一条new指令(new关键字、对象的克隆、对象的序列化等)时,会先去检查这个指令的参数在常量池中定位到一个类的符号引用,并且这个符号引用代表的类是否应被加载过,如果没有那么就去加载该类分配内存类加载完毕后会给对象分配内存空间。对象的所需的内存大小在类加载完毕后就便可完全确认,为对象分配内存大小的空间等同于把一块确定大小的内存从java堆中划分出来。如何划分…

    2022年5月14日
    38
  • Linux云服务器挖矿病毒(crypto和pnscan)导致CPU占用100%问题解决方案「建议收藏」

    Linux云服务器挖矿病毒(crypto和pnscan)导致CPU占用100%问题解决方案「建议收藏」木马攻击问题由来阐述我买了三年的阿里云服务器(在阿里云官网买的),已经使用了一年多了,平时拿来搭建网站,有时也拿来学习技术和开发测试,一直使用很稳定。直到近期我服务器上安装了docker并部署了springboot+mysql+nginx项目,就被攻击了。但就在今年的5月14号,我的服务器被木马攻击,然后被拿去挖矿了。我服务器的cpu持续维持在CPU100%.后果是直接导致我网站无法正常请求和响应。而且Linux服务器的root权限被窃取了。黑客在服务器/root/.ssh目录下生成了连root用户

    2022年5月1日
    56
  • linux系统chmod 755权限

    linux系统chmod 755权限最近学习Lua,写脚本./执行遇到-bash:./helloworld.lua:Permissiondenied提示,意思是没有可执行权限;通过查看使用:sudochmod755helloworld.lua给脚本添加可执行权限正常执行;ll查看文件发现-rwxr-xr-x1rootroot65Oct2119:13helloworld.lua多了读写可执行权限;下面对这些…

    2022年7月16日
    18
  • c++迭代器iterator遍历map_iterator迭代器原理

    c++迭代器iterator遍历map_iterator迭代器原理什么是迭代器迭代器是一种可以遍历容器元素的数据类型。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。C++更趋向于使用迭代器而不是数组下标操作,因为标准库为每一种标准容器(如vector、map和list等)定义了一种迭代器类型,而只有少数容器(如vector)支持数组下标操作访问容器元素。可以通过迭代器指向你想访问容器的元素地址,通过*x打印出元素值。这和我们所熟知的指针极其类似。C语言有指针,指针用起来十分灵活高效。C++语言有迭代器,迭代器相对于指针而言功能更为丰富。vector,是数

    2025年7月1日
    3

发表回复

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

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