前言:
眼前咱们对“设计模式有什么作用”大致比较关心,我们都想要分析一些“设计模式有什么作用”的相关内容。那么小编也在网上汇集了一些关于“设计模式有什么作用””的相关资讯,希望姐妹们能喜欢,兄弟们一起来了解一下吧!通常在回答xxx模式与yyy模式的区别,第一印象就是要分清楚他们俩是不是同一类。
下面给大家整理设计模式分类:
从图中可以看出,代理模式和装饰器膜还是都属于结构型设计模式。
下面我们通过代码案例来看这两个设计模式到底有什么区别:
代理模式案例:
// 定义接口interface Image { void display();}// 被代理类class RealImage implements Image { private String filename; public RealImage(String filename) { this.filename = filename; loadFromDisk(); } private void loadFromDisk() { System.out.println("Loading image from disk: " + filename); } public void display() { System.out.println("Displaying image: " + filename); }}// 代理类class ImageProxy implements Image { private String filename; private RealImage realImage; public ImageProxy(String filename) { this.filename = filename; } public void display() { if (realImage == null) { realImage = new RealImage(filename); } realImage.display(); }}// 使用代理类public class ProxyPatternExample { public static void main(String[] args) { Image image = new ImageProxy("image.jpg"); image.display(); }}
装饰器模式案例:
// 定义接口interface Shape { void draw();}// 具体实现类class Circle implements Shape { public void draw() { System.out.println("Drawing a circle"); }}// 装饰器类abstract class ShapeDecorator implements Shape { protected Shape decoratedShape; public ShapeDecorator(Shape decoratedShape) { this.decoratedShape = decoratedShape; } public void draw() { decoratedShape.draw(); }}// 具体装饰器类class RedShapeDecorator extends ShapeDecorator { public RedShapeDecorator(Shape decoratedShape) { super(decoratedShape); } public void draw() { decoratedShape.draw(); setRedBorder(); } private void setRedBorder() { System.out.println("Adding red border"); }}// 使用装饰器类public class DecoratorPatternExample { public static void main(String[] args) { Shape circle = new Circle(); ShapeDecorator redCircle = new RedShapeDecorator(new Circle()); circle.draw(); redCircle.draw(); }}
这两个例子分别展示了代理模式和装饰器模式的使用方式和区别。
总结
代理模式和装饰器模式是两种不同的设计模式,虽然它们有一些共同的特点,但是在使用方式和实现上有一些区别。
区别如下:
目的不同:代理模式的主要目的是为了控制对对象的访问,而装饰器模式的主要目的是为了给对象添加额外的功能。关注点不同:代理模式关注于对对象的访问进行控制和管理,装饰器模式关注于对对象的功能进行增强。涉及的类不同:代理模式通常涉及到三个角色,即接口、代理类和被代理类,而装饰器模式通常只涉及一个接口和多个装饰器类。功能增强方式不同:代理模式通过在代理类中调用被代理类的方法实现功能增强,而装饰器模式通过在装饰器类中调用被装饰对象的方法,并在其前后添加额外的功能实现功能增强。
代理模式在项目中,用的最多的就是动态代理(比如:JDK、CGLib)。
标签: #设计模式有什么作用