首页 > 编程知识 正文

单例模式应用场景,java设计模式面试题

时间:2023-05-06 01:48:22 阅读:135287 作者:2516

在装饰模式下,可以在不更改结构的情况下向现有对象添加新功能。 这种类型的设计模式是结构模式,是作为现有类的包。

此模式创建包装原始类的装饰类,并在保持类方法签名完整性的同时提供其他功能。

以下示例说明装饰器模式的使用方法。 在其中,我们将一个形状装饰成不同的颜色,同时不改变形状的类别。

1、意图

动态地向对象添加功能。 装饰者模式是一种代替继承的技术,继承可以在不添加子类的情况下扩展对象的新功能。 使用对象关系而不是继承关系可以提供更大的灵活性,并避免类型体系的快速膨胀。

2、适用环境

以动态和透明的方式将责任添加到各个对象,而不影响其他对象

处理可撤销的责任

无法通过生成子类的方法进行扩展时。 一种情况是可能有许多独立的扩展,会生成许多子类以支持每个组合,子类的数量会呈爆炸式增长。 另一种情况是类定义被隐藏,或者类定义不能用于生成子类。

3、键码

Component类起到抽象的作用,不应该具体实现。

限定类引用并继承Component类。 具体的扩展类重写父类方法。

适用例

1、wmdcjl有72个变化,他成为“寺院”后,他的根本还是猴子,但他有寺院的功能。 2、一幅画无论有无画框都可以挂在墙上,通常有画框,实际上画框是挂在墙上的。 挂在墙上之前,可以用玻璃覆盖画并放进框里; 这时,画、玻璃和画框形成了一个物体。

注意:可以代替继承。

4、参与者

抽象组件的作用)

由于真实对象和装饰对象具有相同的接口,因此客户端对象可以像与真实对象一样与装饰对象进行交互。

ConcreteComponent (具体组件的作用,即实际对象) )。

IO流的文件输入流、文件输出流

角色)。

有抽象要素的引用。 装饰对象接受所有客户端的请求,并将这些请求转发给实际对象。 这样就可以在实际对象调用之前和之后添加新功能。

ConcreteDecorator (具体的装饰角色) ) )。

对部件的对象施加新的责任。

5、类图

六、与作用有关的

抽象组件:定义用于指定准备附加功能的类的抽象接口。

具体组件:在附加功能的类中,实现抽象组件的角色界面。

抽象装饰者:具有对具体构成要素的作用的引用,定义与抽象构成要素的作用一致的接口。

具体装饰:负责实现抽象装饰者的作用,为具体构件增加额外的功能。

7、代码实现

一.建立接口

//Shape.java

公共界面形状{

void draw (;

}

二、创建实现接口的实体类。

//Rectangle.java

publicclassrectangleimplementsshape {

@Override

公共void draw (

system.out.println (shape : rectangle );

}

}

//Circle.java

publicclasscircleimplementsshape {

@Override

公共void draw (

system.out.println (shape : circle );

}

}

三、创建实现Shape接口的抽象装饰类。

//ShapeDecorator.java

publicabstractclassshapedecoratorimplementsshape {

受保护的形状解码的形状;

publicshapedecorator (shapedecoratedshape ) (

this.decorated shape=decorated shape;

}

公共void draw (

decoratedShape.draw (;

}

}

四.创建扩展了ShapeDecorator类的实体装饰类。

//RedShapeDecorator.java

publicclassredshapedecoratorextendsshapedecorator {

公共字符解码器(shapedecorator )。

super (已解码形状;

}

@Override

公共void draw (

decoratedShape.draw (;

setredborder (已解码形状;

}

私有卷影(shapedecoratedshape )。

system.out.println (border color : red );

}

}

五.使用RedShapeDecorator装饰Shape对象。

publicclassdecoratorpatterndemo {

publicstaticvoidmain (字符串[ ] args ) {

Shape circle=new Circle (;

shapedecoratorredcircle=newredshapedecorator (new circle ) );

shapedecoratorredrectangle=newredshapedecorator (new rectangle ) );

//shaperedcircle=newredshapedecorator (new circle ) );

//shaperedrectangle=newredshapedecorator (new rectangle () );

system.out.println (circlewithnormalborder );

circle.draw (;

system.out.println (ncircleofredborder );

redCircle.draw (;

system.out.println (rectangleofredborder );

redRectangle.draw (;

}

}

六.运行程序并输出结果

Circle with normal border

形状:轮廓

Circle of red border

形状:轮廓

border color :红色

Rectangle of red border

形状:回复

border color :红色

8、优缺点

1 .好处

装饰类和被装饰类可以独立发展而不相互结合,装饰模式是继承的替代模式,装饰模式可以动态扩展安装类的功能。

2 .坏处

多层装饰比较复杂。

3 .实际使用

其中,在java中I/O使用装饰者模式。

4 .装饰装修人员使用的设计原则:

多使用组合,少继承。

对扩张开放,对修正关闭。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。