Java:Decorator Pattern

装饰模式 Decorator PatternAttach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible alternative to subclassing for extending functionality.动态地给一个对象添加一些额外的职责。就增加功能来说,,装饰模式比生成子类更为灵活。抽象构建角色(Component):该角色用于规范需要装饰的对象(原始对象)。package com.DesignPattern.Structural.Decorator;public interface Component {public void operation();}具体构件角色(Concrete Component):该角色实现抽象构件接口,定义一个需要装饰的原始类。package com.DesignPattern.Structural.Decorator;public class ConcreteComponent implements Component {@Overridepublic void operation() {// 业务代码System.out.println(“concreteComponent opration”);}}装饰角色(Decorator):该角色持有一个构件对象的实例,并定义一个与抽象构件接口一致的接口。package com.DesignPattern.Structural.Decorator;public abstract class Decorator implements Component {private Component component=null;public Decorator(Component component){this.component=component;}@Overridepublic void operation() {this.component.operation();}}具体修饰角色(Concrete Decorator):该角色负责对构件对象进行装饰。package com.DesignPattern.Structural.Decorator;public class ConcreteDecorator extends Decorator {public ConcreteDecorator(Component component) {super(component);}//自己定义的方法private void method(){System.out.println(“add decorator method”);}//重写operation方法public void operation(){this.method();super.operation();}}Client.javapackage com.DesignPattern.Structural.Decorator;public class Client {public static void main(String[] args){Component component=new ConcreteComponent();//进行装饰component=new ConcreteDecorator(component);component.operation();}}装饰模式的实例Car.javapackage com.DesignPattern.Structural.Decorator;//汽车接口public interface Car {// 车的装配public void show();}Benz.javapackage com.DesignPattern.Structural.Decorator;//奔驰车(裸车,需要装饰)public class Benz implements Car {@Overridepublic void show() {System.out.println(“Benz default color is black”);}}CarDecorator.javapackage com.DesignPattern.Structural.Decorator;//汽车装饰(抽象装饰)public abstract class CarDecorator implements Car {private Car car = null;public CarDecorator(Car car) {this.car = car;}@Overridepublic void show() {this.car.show();}}ConcreteCarDecorator.javapackage com.DesignPattern.Structural.Decorator;//具体汽车修饰public class ConcreteCarDecorator extends CarDecorator {public ConcreteCarDecorator(Car car) {super(car);}// 给车彩绘private void print() {System.out.println(“print on car”);}// 给车安装GPSprivate void setGps() {System.out.println(“install GPS”);}// 重写show()方法public void show() {super.show();this.print();this.setGps();}}ClientDemo.javapackage com.DesignPattern.Structural.Decorator;public class ClientDemo {public static void main(String[] args) {Car car = new Benz();// 对奔驰车进行装饰CarDecorator cd = new ConcreteCarDecorator(car);cd.show();}}

使你疲倦的不是前面的高山,而是你鞋里的一粒沙子。

Java:Decorator Pattern

相关文章:

你感兴趣的文章:

标签云: