不是我不小心,只是真情难以寻觅,不是我存心故意,只因无法找到良机,哈哈!!!精辟
Decorator(装饰模式)
动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.
什么时候使用?
也就是说是为已有的功能动态地添加更多功能的一种方式,当系统需要新功能的时候,是向旧的类中添加新的代码,这些新加的代码通常装饰了原有类的核心职责或主要行为.
但问题是,它们在主类中加入了新的字段,新的方法和逻辑,从而增加了主类的复杂度,而这些新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要,装饰模式却提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地,按顺序的使用装饰功能包装对象.
装饰模式的装饰顺序很重要.可以自己调节!
下面来看看代码实现
抽象类人!
public abstract class Person {
//人的行为
public abstract void action();
}
抽象类,老师!(继承于人类)
public abstract class Teacher extends Person {
protected Person person;
public void setPerson(Person person) {
this.person = person;
}
@Override
public void action() {
if(person!=null)
person.action();
}
}
//具体的老师
import lesson3.dao.Teacher;
public class TeacherJason extends Teacher {
private String coutent;
@Override
public void action() {
coutent="嫦娥奔月"; //这里没有用!!
System.out.println("Jason老师动作");
super.action();
// sayHello();
}
//这里具体老师可以有自己的特点,可以扩展
// private String sayHello(){
// return "Jason教课幽默";
// }
}
老师可以有爱好
//爱好类
public class Hobby extends Person {
@Override
public void action() {
//爱好动作
System.out.println("爱好动作---太极拳");
}
}
注意测试!!!
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
//爱好
Hobby s = new Hobby();
//老师jason
TeacherJason jason = new TeacherJason();
jason.setPerson(s);
jason.action();
}
}
结果!!
Jason老师动作
爱好动作---太极拳
总结一下,整理一下思路!!
1,abstract人类,具有行为(走路,思考...)
2,abstract教师,具有行为(走路,思考,教书,备课...),因为教师需要扩展,在这里我们为他准备了一个字段,
protected Person person;并且做了判断,可以理解为null他不需要扩展,反之需要扩展!
3,实际教师.
System.out.println("Jason老师动作");
super.action();
sayHello();
这个顺序可以换,顺序改变业务逻辑随之改变.
4,Hobby(这里我写的爱好,也许不太好理解!大家可以理解成爱人)
这样就好很多,当一个女老师结婚后,身边会多一个爱人!!
(爱人必须是人,所以也要继承Person,哈哈)
就这样吧!!希望大家留言
分享到:
相关推荐
6. **实际应用**:装饰模式在很多场景下都非常有用,如日志记录、性能监控、权限控制等。在Java I/O系统中,流的包装就是装饰模式的一个经典应用。 7. **学习路径**:理解装饰模式的基本概念后,可以通过阅读代码...
6. **工具应用**:在实际开发中,装饰模式常与其他设计模式结合使用,如工厂模式用于创建装饰器对象,策略模式用于选择合适的装饰策略。通过理解装饰模式,开发者可以更好地利用现有的工具库,或者设计出更灵活、可...
装饰模式是一种结构型设计模式,它允许在运行时动态地给对象添加新的行为或属性,而不必修改原有类的代码。这种模式的核心在于装饰者和组件接口的统一,使得装饰者可以替代原对象并添加额外的功能。在"设计模式之...
6. 可能还会讨论到装饰者模式的一些潜在问题,如过多的装饰可能导致代码复杂度增加。 在阅读这篇博客和解压后的“decorator”文件后,你可以深入理解装饰者模式的实现细节,学习如何在自己的项目中运用这一模式,以...
- **ConcreteComponent(具体组件)**:实现了Component接口的类,是装饰模式要装饰的目标对象。它定义了初始行为,不包含任何额外装饰。 - **Decorator(装饰者)**:持有对Component对象的引用,并且实现...
装饰模式是一种设计模式,它是结构型模式之一,用于在运行时动态地给对象添加新的功能。这个模式的主要目的是为了在不改变对象自身的基础上,通过包裹一个对象并扩展其行为,来实现对对象功能的增强。Java中的装饰...
装饰者模式是面向对象设计模式中的一个重要概念,它在C#等编程语言中广泛应用。这个例子以星巴克咖啡为例,展示了如何使用装饰者模式来灵活地扩展对象的功能,而无需修改原有代码。 装饰者模式的核心思想是动态地将...
本资料“PHP面向对象程序设计组合模式与装饰模式详解共6页.pdf”深入探讨了这两种重要的设计模式。 组合模式(Composite Pattern)是一种结构型设计模式,它允许我们构建部分-整体层次结构,使得客户端可以一致地...
6. 使用装饰模式解决实际问题的案例分析 在标签".NET装饰模式讲解共3页.pd"中,可能是由于错误,pd应为pdf,暗示这是一个关于.NET装饰模式的三页PDF文档。这个文档可能提供了更详细的步骤和示例来帮助开发者理解和...
装饰模式是一种结构型设计模式,它允许在运行时动态地给对象添加新的行为或职责,同时保持接口的一致性。这种模式的核心在于“装饰”一个已有对象,而不是创建一个新的子类来扩展功能,从而避免了类爆炸的问题。C++...
装饰模式(Decorator Pattern)是一种结构型设计模式,它允许你向一个现有的对象添加新的功能,同时又不改变其结构。装饰模式通过创建一个装饰类,该类包装了原始类...6、使用这些类来构建我们的对象,并测试装饰模式。
6. `Main.cpp` - 示例程序,展示了如何使用装饰模式和工厂模式创建和操作对象。 通过学习这些源代码,你可以更好地理解和应用这两种设计模式,提升你的C++编程技能。记得在实践中不断探索,设计模式的应用并非...
6. 创建ConcreteDecorator类,重写Decorator类中的方法,添加具体装饰功能。 与代理模式的区别在于,代理模式关注的是对被代理对象的访问控制,而装饰器模式关注的是扩展对象的功能。 适用场景包括: 1. 需要在...
1、装饰模式lua实现 2、代理模式lua实现 3、外观模式lua实现 4、适配器模式lua实现 5、组合模式lua实现 6、桥接模式lua实现 7、享元模式lua实现 行为模式 1、策略模式lua实现 2、模板方法模式lua实现 3、观察者模式...
1 装饰模式 2 单例模式 2 门面模式 2 模板方法模式 3 策略模式 3 工厂方法模式 3 组合模式 4 抽象工厂模式 4 代理模式 4 命令模式 5 迭代器模式 5 适配器模式 5 原型模式 6 简单工厂模式 6 解释器模式 6 享元模式 7 ...
计算机后端-Java-图解java设计模式076 装饰者模式(6).avi
9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版方法+责任链+策略+工厂方法 3 动态代理+Spring AOP 4 责任链模式进阶 Spring Framework设计模式 ...
2. 结构型模式:适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式,用于处理对象结构关系。 3. 行为型模式:策略模式、模板方法模式、观察者模式、命令模式、迭代器模式、责任链模式、...