橋接模式與代理模式區(qū)別如下:
橋接模式(Bridge Pattern)是指將抽象和實現(xiàn)解耦,讓它們可以獨立變化。一個類存在兩個(或多個)獨立變化的維度,通過組合的方式,讓這兩個(或多個)維度可以獨立進行擴展。
代理模式(Proxy Pattern)是指用一個代理對象來代替對真實對象的引用。主要用來控制對一個對象的訪問,同時又能保證安全。
橋接模式示例:
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing Circle...");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Drawing Rectangle...");
}
}
public class ShapeBridge implements Shape {
private int type; // 類型,1表示圓形,2表示矩形
public ShapeBridge(int type) {
this.type = type;
}
@Override
public void draw() {
if(type == 1) {
Circle circle = new Circle();
circle.draw();
} else if(type == 2) {
Rectangle rectangle = new Rectangle();
rectangle.draw();
} else {
System.out.println("Invalid type!");
}
}
}
在上述代碼中,Shape是一個接口,Circle和Rectangle是實現(xiàn)了Shape接口的具體類,它們分別代表圓形和矩形。ShapeBridge是一個橋接類,它也實現(xiàn)了Shape接口,并通過type屬性來區(qū)分是圓形還是矩形,在draw()方法中根據(jù)type屬性的值創(chuàng)建對應(yīng)的圓形或矩形對象,并調(diào)用它們的draw()方法進行繪制。這樣,通過橋接模式,我們可以很方便地擴展出更多的形狀對象。
代理模式示例:
public interface IUserService {
void login();
}
public class UserService implements IUserService {
@Override
public void login() {
System.out.println("Logging in...");
}
}
public class UserServiceProxy implements IUserService {
private IUserService userService;
public UserServiceProxy(IUserService userService) {
this.userService = userService;
}
@Override
public void login() {
System.out.println("Checking credentials..."); // 進行一些前置處理,例如驗證用戶信息等。
userService.login(); // 調(diào)用真實的服務(wù)對象的方法進行登錄。
}
}
在上述代碼中,IUserService是一個接口,UserService是實現(xiàn)了IUserService接口的具體類,它代表一個真實的用戶服務(wù)對象。UserServiceProxy是一個代理類,它也實現(xiàn)了IUserService接口,并在login()方法中進行一些前置處理(例如驗證用戶信息等),然后調(diào)用真實的服務(wù)對象的login()方法進行登錄。通過代理模式,我們可以在調(diào)用真實的服務(wù)對象之前加入一些額外的邏輯處理,從而增強系統(tǒng)的靈活性和可維護性。