设计模式之装饰模式decorator

大白 大白     2022-09-17     436

关键词:

 

 

代码实现

public interface ICar {
    void move();
}
抽象构建角色
//具体构件角色(真实对象,被装饰角色)
class Car implements ICar{

    @Override
    public void move() {
        System.out.println("陆地上跑");
    }
    
}
具体构建角色
//装饰角色
class SuperCar implements ICar{

    private ICar car;
    
    public SuperCar(ICar car) {
        super();
        this.car = car;
    }

    @Override
    public void move() {
        car.move();
    }
}
装饰角色
//具体装饰角色
class FlyCar extends SuperCar{

    public FlyCar(ICar car) {
        super(car);
        // TODO Auto-generated constructor stub
    }
    
    public void fly(){
        System.out.println("天上飞");
    }

    @Override
    public void move() {
        // TODO Auto-generated method stub
        super.move();
        fly();
    }    
}


class WaterCar extends SuperCar{

    public WaterCar(ICar car) {
        super(car);
        // TODO Auto-generated constructor stub
    }
    
    public void swim(){
        System.out.println("水中游");
    }

    @Override
    public void move() {
        // TODO Auto-generated method stub
        super.move();
        swim();
    }    
}


class AICar extends SuperCar{

    public AICar(ICar car) {
        super(car);
        // TODO Auto-generated constructor stub
    }
    
    public void autoMove(){
        System.out.println("自动驾驶");
    }

    @Override
    public void move() {
        // TODO Auto-generated method stub
        super.move();
        autoMove();
    }    
}
具体装饰角色
public class Client {

    public static void main(String[] args) {
        Car car = new Car();
        car.move();
        
//        System.out.println("增加新的功能,飞行-------");
//        FlyCar flycar = new FlyCar(car);
//        flycar.move();
//        
//        System.out.println("增加新的功能,水中游-------");
//        WaterCar waterCar = new WaterCar(flycar);
//        waterCar.move();
        
        System.out.println("增加两个新功能,飞行,水里游---");
        WaterCar waterCar2 = new WaterCar(new FlyCar(car));
        waterCar2.move();    
    }
}
调用测试

 

设计模式---单一职责模式之装饰模式(decorator)(代码片段)

前提:"单一职责"模式在软件组件的设计中,如果责任划分的不清晰,使用继承,得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任典型模式(表现最为突出)装饰模式Decorator桥... 查看详情

设计模式之——decorator模式

Decorator模式又叫装饰者模式,这种模式是为了满足Java开发的“面向扩展开放,面向修改闭源”的开发原则设计出来的。在装饰者模式中,不修改源类的代码,却能修改源类中方法的功能。下面就以Angelababy化妆为例,详细介绍一... 查看详情

设计模式之装饰模式(decorator)

装饰模式是指对象在运行的过程中不断的增加对象,不断的增加功能,而不改变原来对象,只是将对象进行多一层的封装,这个原来类留有接口与这个新的类进行连接,下面我们来假设有一个基类来做继承的角色类,这里大家都... 查看详情

设计模式之装饰模式(decorator)

1、 装饰者模式,动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更加有弹性的替代方案。2、组合和继承的区别继承。继承是给一个类添加行为的比较有效的途径。通过使用继承,可以使得子类在拥有自身... 查看详情

设计模式之装饰者模式

Decorator装饰者模式:类图如下: 注意:1.Decorator继承于Component【ISA关系】,继承的目的是使用装饰者和被装饰都拥有相同的接口。这样用户可以统一的把它们看作成Component,操作起来没有不同2.Decorator又维护一个指向Component实例... 查看详情

设计模式之装饰模式(decorator)详解及代码示例(代码片段)

一、装饰模式的定义  装饰(Decorator)模式的定义:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。二、装饰模式优缺点  装饰(Decorator)模式的主... 查看详情

结构型模式之装饰

...直接给出GOF著作中的Decorator模式结构图:实现案例是学习设计模式的好办法,GOF一书中给了一个例子,就是“图形用户界面”设计的问题,一个图形用户界面工具箱允许你对任意一个用户界面组件添加一些特性,例如边框,或是... 查看详情

c++之装饰(decorator)模式

...或者多重继承出自己想要的类型。装饰模式是一种结构型设计模式,其可以动态的为一个类增加职责(相对于继承)。1装饰模式部件(Component)声明封装器和被封装对象的公用接口。具体部件(ConcreteComponent)类是被封装对象所... 查看详情

设计模式之“decorator”注疏#02

装饰模式在某种意义上来说也是挺原始的,它首先需要一个你被装饰的基础类,再来是需要一个基于这个基础类的原始包装器,可以看作是其它包装器的基础类进而通过继承这个包装器,来构建出多个具有各自功能的特定包装器... 查看详情

java设计模式之decorator模式

...持类库的可重用性可扩展性和灵活性其中使用到了大量的设计模式本文将介绍JDK的I/O包中使用到的Decorator模式并运用此模式实现一个新的输出流类  Decorator模式简介  Decorator模式又名包装器(Wrapper)它的主要用途在于给一个对... 查看详情

设计模式之装饰模式

什么是装饰模式装饰(Decorator)模式又叫做包装模式。通过一种对client透明的方式来扩展对象的功能,是继承关系的一个替换方案。装饰模式的结构装饰模式的角色和职责抽象组件角色:一个抽象接口,是被装饰类和装饰类的父... 查看详情

设计模式之装饰模式(代码片段)

装饰模式——DecoratorPattern装饰模式用于将核心功能与锦上添花的功能分开(锦上添花的功能是可加也可以不加的那种)一般情况只使用核心功能的代码就行,当需要特殊功能时可以有选择地,按照一定顺序使用装饰功能包装对... 查看详情

装饰模式decorator

第三章 装饰模式Decorator 1.1什么是装饰模式?装饰模式Decorator,动态的给一些对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活1.2装饰模式Decorator的结构图 Component是定义一个对象接口,可以给这些对... 查看详情

设计模式之装饰者模式

什么是装饰者模式?装饰者模式以对客户透明的方式动态地给一个对象附加上更多的责任,装饰者模式相比生成子类可以更灵活地增加功能。Component:一般是一个抽象类(也有可能不是),是一组有着某种用途类的基类,包含着... 查看详情

设计模式之装饰模式

装饰模式(Decorate)是指在不必改变原类文件和使用继承的情况下,动态的扩展一个类的功能。它是通过创建一个包装对象,也就是装饰来包括真实的对象。包裹的方式一般是将原来的对象作为装饰类构造方法的参数,但是在不需... 查看详情

戏说模式之装饰者模式(游戏)

装饰者模式定义装饰者(Decorator)模式提供了一种方法,使得在不改变原有类的基础上可以动态的扩展一个对象的功能。即动态的将指着附加到对象上。装饰者模式的特点1、装饰对象和被装饰对象实现了相同的接口。客户端可以不... 查看详情

设计模式--装饰模式(decorator)

装饰模式(Decorator): 动态的给一个对象加入一些额外的职能,就添加功能来说,装饰模式比生成子类更为灵活。实例:ConcreteComponent:让Decorator对象为自己加入功能。有时候使用ConcreteComponent的派生类提供核心功能。在这样的... 查看详情

10结构型模式之装饰模式

概念   装饰(Decorator)模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。        装饰模式就是把要添加的附加功能分别放在单独的类中,并... 查看详情