java设计模式_装饰模式

来源:互联网 发布:手机网络挣钱 编辑:程序博客网 时间:2024/05/11 00:28

一、什么是装饰模式

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

二、装饰模式的结构

这里写图片描述

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

抽象组件角色: 一个抽象接口,是被装饰类和 装饰类的父接口。 具体组件角色:为抽象组件的实现类。 抽象装饰角色:包含一个组件的引用,并定义了
与抽象组件一致的接口。 具体装饰角色:为抽象装饰角色的实现类。负责 具体的装饰。

//示例1:public class Car {    //跑    public void run()    {        System.out.println("可以跑");    }    //飞    public void fly()    {        System.out.println("可以飞");    }    //游    public void swim()    {        System.out.println("可以游");    }    public void show()    {        System.out.println("拥有的功能");        this.run();        this.fly();        this.swim();    }}public class MainClass {    public static void main(String[] args) {        Car bus = new Car();        bus.show();    }}//拥有的功能//可以跑//可以飞//可以游//*上例中显然是车未来全部的功能,不可能每一辆车都拥有这些功能,所以需进一步优化//示例2:public interface Car {    public void show();    public void run();}public class RunCar implements Car{    //跑    public void run()    {        System.out.println("可以跑");    }    public void show()    {        this.run();    }}public class FlyCar implements Car{    //跑    public void run()    {        System.out.println("可以跑");    }    //飞    public void fly()    {        System.out.println("可以飞");    }    public void show()    {        this.run();        this.fly();    }}public class SwimCar implements Car{    //跑    public void run()    {        System.out.println("可以跑");    }    //游    public void swim()    {        System.out.println("可以游");    }    public void show()    {        this.run();        this.swim();    }}public class MainClass {    public static void main(String[] args) {        Car flyCar = new FlyCar();        flyCar.show();    }}//可以跑//可以飞//示例3:进一步优化public interface Car {    public void show();    public void run();}public class RunCar implements Car{    //跑    public void run()    {        System.out.println("可以跑");    }    public void show()    {        this.run();    }}public abstract class CarDecorator {    protected Car car;    public CarDecorator(Car car)    {        this.car = car;    }    public abstract void show();}public class FlyCarDecorator extends CarDecorator{    public FlyCarDecorator(Car car) {        super(car);    }    //飞    public void fly()    {        System.out.println("可以飞");    }    public void show()    {        car.run();        this.fly();    }}public class SwimCarDecorator extends CarDecorator{    public SwimCarDecorator(Car car) {        super(car);    }    //游    public void swim()    {        System.out.println("可以游");    }    public void show()    {        car.run();        this.swim();    }}public class MainClass {    public static void main(String[] args) {        Car flyCar = new RunCar();//      CarDecorator carDecorator = new FlyCarDecorator(flyCar);        CarDecorator carDecorator = new SwimCarDecorator(flyCar);        carDecorator.show();    }}//######FlyCarDecorator#########//可以跑//可以飞//######SwimCarDecorator#########//可以跑//可以游//示例4:再优化public interface Car {    public void show();    public void run();}public class RunCar implements Car{    //跑    public void run()    {        System.out.println("可以跑");    }    public void show()    {        this.run();    }}public abstract class CarDecorator implements Car{    protected Car car;    public CarDecorator(Car car)    {        this.car = car;    }    public abstract void show();}public class FlyCarDecorator extends CarDecorator{    public FlyCarDecorator(Car car) {        super(car);    }    //飞    public void fly()    {        System.out.println("可以飞");    }    //跑     @Override    public void run() {        car.run();    }    public void show()    {        car.show();        this.fly();    }}public class SwimCarDecorator extends CarDecorator{    public SwimCarDecorator(Car car) {        super(car);    }    //游    public void swim()    {        System.out.println("可以游");    }    @Override    public void run() {        car.run();    }    public void show()    {        car.show();        this.swim();    }}public class MainClass {    public static void main(String[] args) {        Car car = new RunCar();        CarDecorator swimCar = new SwimCarDecorator(car);        CarDecorator flySwimCar = new FlyCarDecorator(swimCar);        flySwimCar.show();    }}//可以跑//可以游//可以飞
0 0
原创粉丝点击