public class Test {
/**
* 1)
* Decorator模式应用的要点在于解决“主体类在多个方向上的扩展功能”------是为“装饰”的含义。
* 通过采用组合、而非继承的手法,Decorator模式实现了在运行时动态地扩展对象功能的能力,
* 而且可以根据需要扩展多个功能。避免了单独使用继承带来的“灵活性差"和"多子类衍生问题"。
* 2
* 应用场景: 1)需要扩展一个类的功能,或给一个类增加附加责任
2)需要动态给一个对象增加功能,这些功能可以再动态的撤销
3)需要增加有一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实
特点: 1)装饰对象(Decorator)和真实对象(Tank50,Tank75)有相同的接口(Tank)
2)装饰对象中有个真实对象的索引
缺点: 1)产生比继承少的多的类, 但在调用时,是功能装饰类的组合,
2)所以可能比继承产生更多的对象(因为要new功能装饰类才能对类进行功能扩展)
* @param args
* super的作用调用父类的属性或方法,在构造中必须要写在第一句,否则编译通不过
*/
public static void main(String[] args) {
// DecoratorA,DecoratorB主要体现在功能的扩展, 父子继承关系只有两层,避免多层(复杂)
// 注意每一个装饰类 Decorator 都继承Tank类,构造(构造中传递Tank)和方法中都有super,等于一层层的调用
Tank tank = new Tank50();
Tank tank2 = new Tank75();
DecoratorA da = new DecoratorA(tank); // 且有红外功能
DecoratorB db = new DecoratorB(da); // 且有红外和水陆两栖功能
db.Shot();
}
}
一.
public abstract class Tank {
public abstract void Shot();
public abstract void Run();
}
二.
public class Tank50 extends Tank {
@Override
public void Run() {
System.out.println("run========50");
}
@Override
public void Shot() {
// TODO Auto-generated method stub
System.out.println("shot========50");
}
}
三.抽象装饰类
public abstract class Decorator extends Tank {
private Tank tank; // Has a 对象组合
public Decorator(Tank tank)
{
this.tank = tank;
}
@Override
public void Run() {
// TODO Auto-generated method stub
tank.Run();
}
@Override
public void Shot() {
// TODO Auto-generated method stub
tank.Shot();
}
}
四.具体装饰类
public class DecoratorA extends Decorator {
public DecoratorA(Tank tank) {
super(tank);
// TODO Auto-generated constructor stub
}
public void Shot()
{
// Do some extension //功能扩展 且有红外功能
System.out.println("a.........");
super.Shot();
}
public void Run()
{
super.Run();
}
}
分享到:
相关推荐
### 开发模式之装饰模式详解 #### 装饰模式定义 装饰模式(Decorator Pattern)是一种结构型设计模式,允许向对象动态地添加新的功能,而无需修改其原有结构。这种模式通过创建一个新的包装类来包裹真实的对象,...
装饰模式是一种设计模式,它允许我们在不修改原有对象的基础上,通过添加新的行为或属性来扩展对象的功能。在"装饰模式小猪快跑游戏模拟"这个实例中,我们看到这种模式被巧妙地应用到了一个名为“小猪吃苹果”的游戏...
装饰模式是一种结构型设计模式,它允许我们向一个对象动态地添加新的行为或责任,而无需修改该对象的源代码。在C#中,装饰模式是通过创建一个包装类(Decorator),该包装类实现了与被装饰对象相同的接口,并持有被...
【装饰模式】是一种设计模式,源自Erich Gamma等人编写的《设计模式:可重用面向对象软件的基础》一书。这种模式在Swing开发中尤为常见,用于增强或改进现有对象的功能,尤其在Web应用程序中,如Java的J2EE环境,...
装饰模式是一种设计模式,属于结构型模式,其主要目的是在不改变对象本身的基础上,通过向对象添加新的行为或属性来扩展其功能。这种模式遵循“开闭原则”,即对扩展开放,对修改关闭。 在装饰模式中,有四个关键...
装饰模式是一种结构型设计模式,它允许在运行时给对象添加新的行为或责任,而无需修改对象的源代码。在Java中,装饰模式通常通过继承和组合来实现,提供了比子类化更灵活的方式来扩展对象的功能。 装饰模式的核心...
装饰模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式在软件工程中非常常见,因为它提供了灵活性,使得我们可以独立于对象的组合来扩展功能。 在C++中,装饰...
装饰模式是一种结构型设计模式,它允许在运行时动态地给对象添加新的行为或属性,而不必修改原有类的代码。这种模式的核心在于装饰者和组件接口的统一,使得装饰者可以替代原对象并添加额外的功能。在"设计模式之...
装饰模式(Decorator)是软件设计领域中一种非常实用的结构型设计模式,它允许我们向一个对象添加新的行为或责任,而无需修改该对象的源代码。在C++编程语言中,装饰模式常用于动态地扩展类的功能,使得类的行为在...
装饰模式是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式在不违背开闭原则(对扩展开放,对修改关闭)的前提下,提供了灵活的扩展机制。装饰模式通常用于为已有对象添加...
装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...
装饰模式是一种设计模式,它允许在不改变对象自身的情况下,动态地给对象添加新的行为或职责。这种模式常用于在不修改源代码的情况下扩展对象的功能,或者为对象提供额外的职责。在本例中,"项目经理接到一个项目,...
装饰模式是一种设计模式,它允许我们在不改变对象本身的情况下,为对象添加新的行为或属性,从而扩展其功能。这种模式遵循“开闭原则”,即对扩展开放,对修改关闭,这意味着我们可以灵活地增加一个对象的功能,而...
装饰模式是一种结构型设计模式,它允许我们向现有的对象添加新的功能,同时又不破坏其原有的结构。在C#中,装饰模式常用于在运行时动态地改变对象的行为,而无需修改原始类的代码。这种模式的核心在于装饰者类与被...
装饰模式是一种设计模式,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。这种模式在软件工程中非常有用,因为它提供了灵活性,使得代码可以在不破坏封装性的前提下进行扩展。 在"实验九:装饰...
装饰模式是一种设计模式,它允许在不修改对象本身的情况下,通过包装(或“装饰”)对象来动态地扩展其功能。在面向切面编程(Aspect Oriented Programming, AOP)中,装饰模式常被用来实现在运行时向目标对象添加...
装饰模式是一种结构型设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式通常用于保持对象的原始类结构不变,同时增强其功能。HeadFirst 设计模式系列书籍以其生动有趣的插图和...
装饰模式是一种结构型设计模式,它允许我们向对象添加新的行为或责任,而无需修改对象的源代码。这种模式在不违背开闭原则(对扩展开放,对修改关闭)的前提下,提供了灵活的扩展机制。在《Head First设计模式》一书...
装饰模式是一种结构型设计模式,它是面向对象设计中用来动态添加或修改对象功能的一种方法。在软件工程中,装饰模式允许我们向一个现有的对象添加新的行为或职责,同时又不改变其原有的结构,从而实现对类的功能扩展...
装饰模式是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式在Java等面向对象编程语言中非常常见,因为它提供了灵活性,使得扩展对象的功能变得容易且优雅。在这个"装饰...