Java工廠模式和代理模式都是常用的設(shè)計(jì)模式,但它們有著不同的應(yīng)用場景和工作原理。
工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,旨在為客戶端提供一種創(chuàng)建對象的方式,同時(shí)隱藏了對象的創(chuàng)建細(xì)節(jié)。通過工廠模式,客戶端可以通過簡單的接口調(diào)用得到所需對象。工廠模式主要有三種類型:簡單工廠模式、工廠方法模式和抽象工廠模式。其中,簡單工廠模式將對象的創(chuàng)建邏輯放入一個(gè)工廠類中,對客戶端提供一個(gè)工廠方法來創(chuàng)建對象。而工廠方法模式則將工廠類抽象化,每個(gè)具體工廠類負(fù)責(zé)創(chuàng)建自己特定的產(chǎn)品。抽象工廠模式則為創(chuàng)建一族產(chǎn)品提供一個(gè)工廠接口,而每個(gè)具體工廠類則負(fù)責(zé)創(chuàng)建自己的一族產(chǎn)品。
// 簡單工廠模式示例代碼 public class ShapeFactory { public static Shape getShape(String type) { if(type.equalsIgnoreCase("circle")) { return new Circle(); } else if (type.equalsIgnoreCase("rectangle")) { return new Rectangle(); } else if (type.equalsIgnoreCase("square")) { return new Square(); } return null; } }
代理模式則是一種結(jié)構(gòu)型設(shè)計(jì)模式,旨在為對象提供一個(gè)代理或占位符,以便于控制對對象的訪問。代理模式的核心在于代理類與目標(biāo)類實(shí)現(xiàn)相同的接口,對外提供相同的方法,并在調(diào)用目標(biāo)類方法前后進(jìn)行一些特定的處理。可以根據(jù)代理的不同形式分為靜態(tài)代理和動(dòng)態(tài)代理。
// 靜態(tài)代理模式示例代碼 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(); } }
工廠模式和代理模式雖然都屬于設(shè)計(jì)模式,但它們的作用和實(shí)現(xiàn)方式有明顯的不同。工廠模式旨在隱藏對象的創(chuàng)建細(xì)節(jié),為客戶端提供一種簡單的接口來創(chuàng)建對象。而代理模式則旨在控制對對象的訪問,為對象提供一個(gè)代理或者占位符來訪問。