欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java裝飾者和代理模式的區別

宋博文1年前6瀏覽0評論

Java裝飾者和代理模式是兩種常見的設計模式,在軟件開發中被廣泛應用。雖然它們有些相似之處,但實際上它們有很大的區別。下文將詳細描述這兩種模式的區別。

首先,讓我們看看Java裝飾者模式。這種模式允許您動態地將新功能添加到現有的對象中,而不用改變其結構和接口。從技術上講,裝飾者充當了包裝器,使得原始的對象保持不變,而通過添加新的功能來增強其能力。以下是一個示例代碼:

public interface Shape {
void draw();
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Rectangle");
}
}
public abstract class ShapeDecorator implements Shape {
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape){
this.decoratedShape = decoratedShape;
}
public void draw(){
decoratedShape.draw();
}
}
public class RedShapeDecorator extends ShapeDecorator {
public RedShapeDecorator(Shape decoratedShape) {
super(decoratedShape);		
}
@Override
public void draw() {
decoratedShape.draw();	       
setRedBorder(decoratedShape);
}
private void setRedBorder(Shape decoratedShape){
System.out.println("Border Color: Red");
}
}

現在,讓我們看看代理模式。這個模式允許您通過創建一個代理類來控制另一個類的訪問。代理和原始對象都必須實現相同的接口,以便代理能夠控制對原始對象的訪問。以下是一個示例代碼:

public interface Image {
void display();
}
public class RealImage implements Image {
private String fileName;
public RealImage(String fileName){
this.fileName = fileName;
loadFromDisk(fileName);
}
@Override
public void display() {
System.out.println("Displaying " + fileName);
}
private void loadFromDisk(String fileName){
System.out.println("Loading " + fileName);
}
}
public class ProxyImage implements Image{
private RealImage realImage;
private String fileName;
public ProxyImage(String fileName){
this.fileName = fileName;
}
@Override
public void display() {
if(realImage == null){
realImage = new RealImage(fileName);
}
realImage.display();
}
}

從上面的代碼可以看出,裝飾者模式和代理模式都實現了相同的接口,但它們的目的和特點卻有很大的不同。裝飾者模式通常用于動態添加新的功能,而代理模式則用于控制對象的訪問。相比之下,裝飾者模式更注重于功能的擴展,而代理模式則更注重于控制對象的訪問。