装饰模式

来源:互联网 发布:js template模板 编辑:程序博客网 时间:2024/06/10 08:53

一、什么是装饰模式

        装饰(Decorator)模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。

二、装饰模式的结构

三、装饰模式的角色和职责

抽象组件角色:一个抽象接口,是被装饰类和装饰类的父接口。

具体组件角色:为抽象组件的实现类。

抽象装饰角色:包含一个组件的引用,并定义了与抽象组件一致的接口。

具体装饰角色:为抽象装饰角色的实现类。负责具体的装饰。

package com.dw.test;//抽象组件角色: 一个抽象接口,是被装饰类和装饰类的父接口。public abstract class Car {   public abstract void show();   public abstract void run();}

package com.dw.test;//具体组件角色:为抽象组件的实现类  被装饰类public class RunCar extends Car {public void show() {this.run();}public void run() {System.out.println("可以跑");}}

package com.dw.test;//抽象装饰角色:包含一个组件的引用,并定义了与抽象组件一致的接口。public abstract class CarDecorator extends Car {private Car car;public Car getCar() {return car;}public void setCar(Car car) {this.car = car;}public CarDecorator(Car car){this.car=car;}public abstract void show();}

package com.dw.test;//具体装饰角色:为抽象装饰角色的实现类。负责具体的装饰。public class FlyCarDecorator extends CarDecorator {public FlyCarDecorator(Car car) {super(car);}public void show() {this.getCar().show();this.fly();}public void fly(){System.out.println("可以飞");}public void run() {}}

package com.dw.test;public class MainClass {/*一、什么是装饰模式装饰( Decorator )模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。三、装饰模式的角色和职责抽象组件角色: 一个抽象接口,是被装饰类和装饰类的父接口。具体组件角色:为抽象组件的实现类。抽象装饰角色:包含一个组件的引用,并定义了与抽象组件一致的接口。具体装饰角色:为抽象装饰角色的实现类。负责具体的装饰*/  public static void main(String[] args) {Car car=new RunCar();car.show();System.out.println("-----------------");Car car1=new FlyCarDecorator(car);car1.show();  }}




0 0
原创粉丝点击