装饰者模式案例
Posted 前进道路上的程序猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰者模式案例相关的知识,希望对你有一定的参考价值。
前言
装饰者模式是指在不改变原有对象的基础上,将功能附加在对象上,提供了比继承者更有弹性方案。
案例
在现实生活中,我们买车一般有基础配置、中配、高配等,在这里我们就可以应用装饰者模式来这种情况进行描述
创建车辆接口
首先我们创建一个车辆接口,里面有两个方法,分别用于获取描述信息以及价格
ICar
public interface ICar
public String getMsg();
public int getPrice();
创建基础版车
NormalCard
public class NormalCard implements ICar
@Override
public String getMsg()
return "普通车";
@Override
public int getPrice()
return 100000;
创建装饰抽象类
CarDecorator :
public abstract class CarDecorator implements ICar
private ICar iCar;
public CarDecorator(ICar iCar)
this.iCar = iCar;
public String getMsg()
return this.iCar.getMsg();
public int getPrice()
return this.iCar.getPrice();
这个装饰抽象类实现了ICar接口,类中有一个iCar类型的私有变量,这个变量在构造时进行赋值。同时其实现的getMsg和getPrice都是调用构造时传进来的iCar的getMsg和getPrice
创建GPS装饰和座椅装饰
GPSCarDecorstor :
public class GPSCarDecorstor extends CarDecorator
public GPSCarDecorstor(ICar iCar)
super(iCar);
public String getMsg()
return super.getMsg()+"+GPS导航";
public int getPrice()
return super.getPrice()+1500;
SeatCarDecorstor :
public class SeatCarDecorstor extends CarDecorator
public SeatCarDecorstor(ICar iCar)
super(iCar);
public String getMsg()
return super.getMsg()+"+豪华座椅";
public int getPrice()
return super.getPrice()+10000;
可以看到,这两种装饰类继承了CarDecorator抽象类,并且重写了相应的getMsg和getPrice,在父类方法上进行了装饰
测试
public class Test
public static void main(String[] args)
ICar car = new NormalCard();
car = new GPSCarDecorstor(car);
car = new SeatCarDecorstor(car);
System.out.println(car.getMsg()+",价格:【"+car.getPrice()+"】元");
相应的类图如下:
以上是关于装饰者模式案例的主要内容,如果未能解决你的问题,请参考以下文章