/**假如我们现在有三个类
A类 B类 C类
其中 B类、C类都是A类的子类
现在我们遇到一个问题,就是我要扩展B类和C类的功能,新增的三种功能分别用method1()、method2()、method3()来表示
在我们遇到这个问题之前,B类和C类都各自有自己的子类,
比如,那B类来讲,它的子类当中有的只新增了method1(), 有的新增了method1()和method2(), 有的三个新的功能都增加了
因此B类的子类的数目应该是2^3 - 1 = 7个
同样, C类也有7个子类
这个一样凭空多出了好些个类, 此时我们可以用装饰器模式
*/
/**A接口*/
package com.michael.decorator;
public interface A {
public abstract void eat();
}
/**B类*/
package com.michael.decorator;
import michael.decorator.Decorator1;
public class B implements A {
//现在要扩展B类的功能
public static void main(String[] args) {
B b = new B();
b.eat();
Decorator1 d1 = new Decorator1(b);
d1.method1();
}
public void eat() {
System.out.println("eat----------");
}
}
/**C类*/
package com.michael.decorator;
public class C implements A {
public void eat() {
System.out.println("C--eat()---------");
}
public static void main(String args[]){
C c = new C();
c.eat();
Decorator2 d2 = new Decorator(c);
d2.method2();
}
}
/**装饰器1*/
package michael.decorator;
import com.michael.decorator.A;
public class Decorator1 implements A {
//包含参数为A的构造方法
public Decorator1(A a){
}
public void method1(){
System.out.println("Method1---------");
}
public void eat() {
// TODO Auto-generated method stub
}
}
/**装饰器2*/
package michael.decorator;
import com.michael.decorator.A;
public class Decorator2 implements A{
//包含参数为A的构造方法
public Decorator2(A a){
}
public void method2(){
System.out.println("Method2---------");
}
public void eat() {
// TODO Auto-generated method stub
}
}
/**装饰器3*/
package michael.decorator;
import com.michael.decorator.A;
public class Decorator3 implements A {
//包含参数为A的构造方法
public Decorator3(A a){
}
public void method3(){
System.out.println("Method3---------");
}
public void eat() {
// TODO Auto-generated method stub
}
}
分享到:
相关推荐
**设计模式——抽象工厂之小解** 在软件工程中,设计模式是一种被广泛采用的解决常见问题的经验总结,它们是经过验证的、可重用的解决方案。抽象工厂(Abstract Factory)设计模式是其中的一种创建型模式,它提供了...
VisualC 实效编程 38 小解霸――VCD典型控制VisualC 实效编程 38 小解霸――VCD典型控制VisualC 实效编程 38 小解霸――VCD典型控制VisualC 实效编程 38 小解霸――VCD典型控制VisualC 实效编程 38 小解霸――VCD...
【小解霸】是一款专为初学者设计的VCD(Video Compact Disc)播放与控制软件,尤其适合于那些对计算机编程有一定兴趣但经验不足的“菜鸟”用户进行学习和实践。这个实例35主要讲解了如何通过编程实现VCD的典型控制...
标题中的“U盘启动小解”指的是利用USB闪存驱动器来模拟CD-ROM启动功能,以便在没有光驱的台式机上安装操作系统或进行系统维护。随着技术的发展,越来越多的计算机不再配备光驱,而USB设备由于其便携性和高速传输...
JavaEE是企业级应用开发的标准框架,其中Cookie是它用于管理客户端会话状态的重要机制。在Web应用程序中,Cookie常用来存储用户偏好设置、登录状态等信息,它们会在客户端浏览器和服务器之间来回传递。...
Python Challenge是一款基于网页的编程游戏,它旨在通过一系列有趣的谜题来锻炼玩家的Python编程技能。这款游戏虽然历史悠久,但依然充满挑战性,因为每个关卡都需要玩家运用编程思维来解决问题,有时甚至涉及到一些...
但两者是存在差异的 :nth-child 选择器,在此例子中意思就是指 1.首先是个p元素 2.其次这个p元素是其父元素的第二个孩子 :nth-of-type 选择器,在此例子中意思就是指 1.定位一个父元素下的第二个p元素 :nth-of-type
49·获取windows版本号和运行模式 50·枚举可用字体 第六章 51·向导程序 52·系统托盘程序 53·隐藏程序不被关闭程序发现 54·枚举系统正在运行的程序 55·启动并控制其他exe程序 56·禁止运行程序多个实力 57·...
它不仅能够高效地处理数据,还具备一定的编程能力,可以用来编写复杂的脚本。 #### 二、基本语法与参数 AWK的基本语法结构如下: ```bash awk 'pattern { action }' file ``` - `pattern`: 模式,定义了要匹配的...
4. **可访问性**:考虑到不同用户的需求,GUI应具备良好的可访问性,比如支持高对比度模式、字体大小调整以及键盘导航等,以满足视力障碍或其他障碍的用户。 5. **一致性**:保持界面的一致性可以使用户更容易学习...
VC++ 小解霸 VCD典型播放控制 VC++小解霸――VCD典型播放控制,模仿早期的Windows Media Player播放器,它只能播放DAT格式的文件 ,这种文件是VCD格式,因此这个播放器主要是用来播放VCD的,界面也挺老的,但很经典...
`Invalidate()` 是Windows编程中一个非常重要的函数,主要用于控制窗口的重绘行为。该函数可以让应用程序通知系统某个窗口或者其部分区域需要重新绘制。这对于图形界面的应用开发尤其重要,比如在进行图像处理、动画...
Java作为一门广泛应用于服务器端、桌面应用以及移动设备等领域的编程语言,其运行环境尤为重要。本文将深入探讨Java运行环境(JRE)的相关概念,包括JRE与JDK的关系、JRE内部结构解析以及如何在多JRE环境下进行配置...
- `forgotPattern()`:当用户忘记解锁模式时,此方法被调用。 - `isSecure()`:判断是否需要PIN等安全措施来解锁设备。 - `isVerifyUnlockOnly()`:检查当前是否仅需验证用户能通过锁屏,而无需进行完全解锁。 -...
自定义ViewGroup意味着创建一个新的布局管理器,需要重写`onMeasure()`和`onLayout()`方法。`onMeasure()`用于测量所有子View的大小,`onLayout()`则根据测量结果确定每个子View的位置。在这个Demo中,开发者可能...
实例49 获取Windows版本号和运行模式 实例50 枚举可用字体 第6章 程序控制 实例51 向导程序 实例52 系统托盘程序 实例53 隐藏程序不被关闭程序发现 实例54 枚举系统正在运行的程序 ...
【连接池小解】 连接池是现代Web应用中不可或缺的一部分,尤其在处理高并发和大量数据库交互场景下,它的作用尤为显著。连接池的核心概念在于有效地管理和复用数据库连接,从而提高系统的性能和稳定性。 在Java中...
### div弹出层position属性小解 在网页布局与设计中,`position` 属性是 CSS 中一个非常重要的属性,它决定了元素如何在页面中定位。对于创建弹出层、模态框等交互式组件来说,正确理解并使用 `position` 属性至关...
这通常发生在开发人员编写的应用程序中,可能是由于编程错误导致的。 ### 2 0x00000002 系统找不到指定的档案 当尝试访问一个不存在的文件时,系统会返回这个错误代码。这可能是因为文件已被删除、移动或者名称拼写...