首页 > 其他分享 >装饰模式实现

装饰模式实现

时间:2023-11-09 09:35:26浏览次数:35  
标签:phone 实现 System 模式 public Phone println voice 装饰

用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而JarPhone除了声音还能振动;更高级的手机(ComplexPhone)除了声音、振动外,还有灯光闪烁提示。

类图:

 

 源码:

1. 提交源代码;

package simplePhone;

/**

 * 抽象手机构件类:抽象构件类

 * @author 9986

 *

 */

public abstract class Phone {

public abstract void voice();

}

 

package simplePhone;

/**

 * 简单手机类:具体构件类

 * @author 9986

 *

 */

public class SimplePhone extends Phone{

 

public SimplePhone() {

System.out.println("这是一部简单手机");

}

 

@Override

public void voice() {

System.out.println("手机来电声音");

}

 

}

 

package simplePhone;

/**

 * 构件装饰类:抽象装饰类

 * @author 9986

 *

 */

public class Changer extends Phone{

private Phone phone;

public Changer(Phone phone) {

this.phone=phone;

}

 

@Override

public void voice() {

phone.voice();

}

 

}

 

package simplePhone;

/**

 * Complex手机类:具体装饰类

 * @author 9986

 *

 */

public class ComplexPhone extends Changer{

 

public ComplexPhone(Phone phone) {

super(phone);

System.out.println("变成高级手机");

flash();

}

 

public void flash() {

System.out.println("手机来电闪烁灯光提示");

}

 

}

 

package simplePhone;

/**

 * Jar手机类:具体装饰类

 * @author 9986

 *

 */

public final class JarPhone extends Changer{

 

public JarPhone(Phone phone) {

super(phone);

System.out.println("手机增加震动功能");

}

 

public void voice() {

super.voice();

System.out.println("来电震动");

}

}

 

package simplePhone;

/**

 * 客户端测试类

 * @author 9986

 *

 */

public class Client {

public static void main(String[] args) {

//父类调用子类方法

Phone p1=new SimplePhone();

p1.voice();

System.out.println("====================");

Phone p2=new JarPhone(p1);

p2.voice();

System.out.println("====================");

Phone p3=new ComplexPhone(p2);

p3.voice();

}

}

 

 

 

标签:phone,实现,System,模式,public,Phone,println,voice,装饰
From: https://www.cnblogs.com/222wan/p/17818979.html

相关文章

  • Redis 哨兵模式的原理及其搭建
    1.Redis哨兵Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。1.1.哨兵原理1.1.1.集群结构和作用哨兵的结构如图:哨兵的作用如下:监控:Sentinel会不断检查您的master和slave是否按预期工作。自动故障恢复:如果master故障,Sentinel会将一个slave提升为master。当......
  • 每日随笔——抽象工厂模式
    [实验任务一]:人与肤色使用抽象工厂模式,完成下述产品等级结构: 实验要求:1.画出对应的类图;2.提交源代码;3.注意编程规范。1、类图 2、 源码BlackFactorypackagesc4;publicclassBlackFactoryimplementsMWFactory{publicstaticManproduceMan(){......
  • 每日总结之设计模式:组合模式
    一、什么是组合模式组合模式也成为整体部分模式,是一种结构型设计模式。它将对象组合成树形的层次结构,用来表示“整体-部分”的关系。通过组合模式,我们可以使用相同的方式处理单个对象和多个对象组合。二、角色组成组件(Component):定义组合模式中所有对象共有的方法和属性。叶......
  • WPF VirtualizingPanel 实现UI虚拟化
    当需要优化ItemsControl的性能时,使用VirtualizingPanel。优点是不会为面板的所有子元素创建相应的UI元素,而只会为显示的那些子元素创建相应的UI元素。尤其是元素多的情况下,这会导致性能上的巨大差异。VirtualizingPanel类中实现以下几项依赖属性。CacheLength/CacheLeng......
  • 怎么用一张照片做人脸识别,通过技术可以实现吗?讲讲原理
    AI是否能够拥有真正的“思想”是一个哲学和科技界长期争论的话题。目前的AI,包括高级的机器学习系统和神经网络,是基于人类设计的算法和数据来运作的,它们并不具备自我意识或者主观体验。AI系统可以执行复杂的任务,比如驾驶汽车、玩棋盘游戏、甚至进行艺术创作,但它们这样做是因为被编......
  • ai识别图片文字,通过技术如何实现
    AI识别图片文字的技术主要是通过光学字符识别(OCR)来实现的。以下是一个简单的流程:预处理:这是第一步,主要是为了改善图像质量,以便更好地识别文字。预处理可能包括灰度处理、二值化、去噪、平滑处理等。文本定位:在这一步,AI需要确定图像中的文本区域。这通常通过边缘检测、形态学......
  • C++跨DLL内存所有权问题探幽(一)DLL提供的全局单例模式
    最近在开发的时候,特别是遇到关于跨DLL申请对象、指针、内存等问题的时候遇到了这么一个问题。问题跨DLL能不能调用到DLL中提供的单例?问题比较简单,就是我现在有一个进程A,有DLLBDLLC,这两个DLL都依赖DLLD的单例,这个时候如果A调用了DLLB和DLLC,那么B和C能否正确引用到这个指......
  • 常用设计模式大全
    1.设计模式设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件......
  • 以多个文件的名称为基准复制其他路径下的同名文件:Python实现
      本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件的名称,从另一个文件夹中找到与这一文件夹中文件同名的文件,并将找到的同名文件复制到第三个文件夹中的方法。  首先,我们来明确一下本文的具体需求。现有一个文件夹,其中有大量的Excel表格文件(在......
  • "单"身贵族爱好者必备:新手也能看懂的单例模式入门指南
    大家好,欢迎来到程序视点!前言在前面三期里,我们详细讲解了工厂模式下的三种分类:简单工厂模式(SimpleFactory)工厂方法模式(FactoryMethod)抽象工厂模式(AbstractFactory)其中,简单工厂模式不是我们23中设计模式之气,其他两个设计模式都属于创建型模式的设计方式。今天,我们要接着讲......