設(shè)計模式是在軟件開發(fā)領(lǐng)域中,針對特定問題的解決方案,它利用了過去經(jīng)驗和成功的設(shè)計實踐。Java中有23種常見的設(shè)計模式。
應(yīng)用場景:
1. 工廠模式(Factory Pattern):當(dāng)需要根據(jù)不同條件創(chuàng)建不同對象時,工廠模式很有用。例如,一個類固定處理一種事情,但可能有不同的方式要求進行處理,這時就可以使用工廠模式來創(chuàng)建實例。
public interface Animal{ void sound(); } public class Dog implements Animal{ public void sound(){ System.out.println("汪汪!"); } } public class Cat implements Animal{ public void sound(){ System.out.println("喵喵!"); } } public class AnimalFactory{ //根據(jù)類型返回實例 public Animal getAnimal(String type){ if(type.equals("dog")){ return new Dog(); }else if(type.equals("cat")){ return new Cat(); } return null; } } public class Main{ public static void main(String[] args){ AnimalFactory animalFactory = new AnimalFactory(); Animal animal1 = animalFactory.getAnimal("dog"); animal1.sound(); Animal animal2 = animalFactory.getAnimal("cat"); animal2.sound(); } }
2. 代理模式(Proxy Pattern):代理模式是在一個對象之前提供了一個代理,以控制對該對象的訪問,可以對對象的訪問控制,提供對象的保護。
interface Image { void display(); } 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); } } 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(); } } public class Main { public static void main(String[] args) { Image image = new ProxyImage("test.png"); image.display(); System.out.println(""); image.display(); } }
3. 單例模式(Singleton Pattern):在整個應(yīng)用程序中,只有一個實例。可以通過靜態(tài)方法getInstance() 來創(chuàng)建單例,可以從任何地方訪問它的方法。
class Singleton { private static Singleton instance = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return instance; } public void showMessage(){ System.out.println("Hello World!"); } } public class Main { public static void main(String[] args) { Singleton obj = Singleton.getInstance(); obj.showMessage(); } }
以上是Java中幾個常見的設(shè)計模式,通過對應(yīng)不同的問題優(yōu)化,使程序達到更好的聚焦性和可維護性。