GOF设计模式-装饰模式
来源:互联网 发布:手机淘宝怎么发布帖子 编辑:程序博客网 时间:2024/06/05 20:36
在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
- Component:抽象组件,给对象动态的添加职责。
- ConcreteComponent:组件具体实现类。
- Decorator:抽象装饰者,继承Component,从外类来拓展Component类的功能,但对于Component来说无需知道Decorator的存在。
- ConcreteDecorator:装饰者具体实现类。
举个改装越野车的例子
我们现在有辆车要改成帕杰罗,和普拉多式的硬派越野车。
首先定义一个car的接口(Component)
public interface Car { public void getCar();}
然后购买一辆车MyCar(ConcreteComponent)
public class MyCar implements Car { @Override public void getCar() { System.out.println("这里是家用车原型。"); }}
创建一个抽象的越野车JeepCar(Decorator)
注意这里一定要把Car引进来,不然就没法装饰了
public abstract class JeepCar implements Car{ private Car car; public JeepCar(Car car) { this.car = car; } @Override public void getCar() { car.getCar(); } protected void baoxiangang(){ System.out.println("加装防撞钢梁"); } protected void jiaopan(){ System.out.println("加装拖车绞盘"); } protected void tanzhaodeng(){ System.out.println("假装探照灯"); } protected void jianzhen(){ System.out.println("更换减震套装,提高地盘高度"); }}
具体的装饰类Pajero,Prado。装饰的顺序可以自己随意定义(当然也可以先装饰再买车)
public class Pajero extends JeepCar { public Pajero(Car car) { super(car); } @Override public void getCar() { super.getCar(); baoxiangang(); jiaopan(); tanzhaodeng(); jianzhen(); System.out.println("帕杰罗改装完成!"); }}
public class Prado extends JeepCar { public Prado(Car car) { super(car); } @Override public void getCar() { super.getCar(); baoxiangang(); jiaopan(); tanzhaodeng(); jianzhen(); System.out.println("普拉多改装完成!"); }}
好了,写个测试类
public class Test { public static void main(String[] args) { Car myCar = new MyCar(); Pajero pajero = new Pajero(myCar); pajero.getCar(); System.out.println("=========我是华丽的分割线============"); Prado prado = new Prado(myCar); prado.getCar(); }}
OK,两辆越野车已经改装完毕,可以去西藏了………..
推荐使用组合而非继承的方式,动态的来扩展一个对象的功能,在运行时选择不同的装饰器,从而实现不同的行为。这样能有效的避免了使用继承的方式扩展对象功能而带来的灵活性差,子类无限制扩张的问题。
代码地址:https://github.com/mazh1992/model/
0 0
- GOF设计模式-装饰模式
- GOF设计模式之DECORATOR(装饰)
- GOF之装饰模式
- Decorator装饰者模式 - GoF设计模式(二)
- GOF 23设计模式之 装饰模式(Decorator)
- Java常用GoF设计模式之一装饰者模式
- java Gof设计模设的学习---------装饰模式
- 设计模式与GoF
- GOF设计模式
- GoF的设计模式
- GOF设计模式
- GOF设计模式
- ----GoF 设计模式概要
- 戏说GoF设计模式
- GOF设计模式
- 设计模式GOF
- GoF是什么----设计模式
- GOF设计模式
- DES加密的详解
- Spring AOP 实现原理
- 闭锁CountDownLatch的用法
- itk&vtk(1)
- HEX文件格式详解
- GOF设计模式-装饰模式
- 屏幕适配
- 1002. A+B for Polynomials (25)
- How Qt Signals and Slots Work
- NYOJ1237 第八届acm省赛 B最大岛屿
- Java调用C#WEBSERVICE需要注意的细节及实例
- C#webbrowser设置缩放比例
- (spring mvc)使用google的kaptcha生成验证码
- Maven最佳实践:划分模块