您的位置:首页 > 其它

设计模式之装饰模式

2017-04-20 17:40 169 查看

设计模式之装饰模式

什么是装饰模式

动态的为一个对象添加新的功能

装饰模式是一种用于代替继承的技术,无需通过继承增加子类就能扩展新的功能,使用对象的关联关系,代替继承关系,更加灵活,同时避免类型体系的快速膨胀

组成:

Component(抽象构建类)

concreteComponent(具体的抽象构建类)

deocorator(装饰器)

concretedeocorator(具体装饰器)

装饰模式怎么用

我们一汽车增加新的移动方式为例,写装饰模式。

如果我们没有用装饰模式将会产生很多类。比如我们要增加一个可以飞的可以水里游的,我们要增加一个这样的类,当我们使用装饰着模式时我们通过对象的组合来实现。减少类的增加。



package decorator;

/**
*  Component(抽象构建类)
*/
public interface ICar {
void move();
}

/**
*  concreteComponent(具体的抽象构建类)
*/
class Car implements ICar{

@Override
public void move() {
System.out.println("陆地上跑");
}
}

/**
*  deocorator(装饰器)
*/
class Supercar implements ICar{

protected Car car;

public Supercar(Car car) {
super();
this.car = car;
}

@Override
public void move() {
car.move();
}

}

/**
* concretedeocorator(具体装饰器)
*/
class FlyCar extends Supercar{

public FlyCar(Car car) {
super(car);
}

@Override
public void move() {
super.move();
System.out.println("天上飞");
}
}

class WaterCar extends Supercar{

public WaterCar(Car car) {
super(car);
}

@Override
public void move() {
super.move();
System.out.println("水里游");
}
}


package decorator;

public class Client {
public static void main(String[] args) {
Car car = new Car();
car.move();
System.out.println("增加飞行功能------------");
FlyCar flyCar = new FlyCar(car);
flyCar.move();
}
}


为什么要用装饰类

装饰模式也叫包装器模式,

装饰模式降低系统的耦合度,可以动态的增加或者删除对象的职责,并使得具体装饰的对象和具体的装饰器可以独立变化,以便增加新的具体构件类和具体装饰类

优点:

扩展对象功能,比继承灵活,不会导致类的个数急剧增加,

可以对一个对象进行多次装饰,创造出不同行为的组合,得到功能更加强大的对象

具体构建类和具体装饰类可以独立变化,用户可以根据自己的需要增加新的具体构建类和具体装饰类

缺点:产生很多小对象,大量的小对象占内存,一定程度上影响性能,

装饰模式易于出错,排查麻烦。

应用场景:

io中的输入输出流的设计

Swing包中图形界面构件功能,、

Struts2中的requsest ,session,respone,对象的处理

装饰者模式和桥接模式的区别:

桥接模式是对象自身现有机制沿着多个维度变化

装饰者模式是为了增加对象的新功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息