Java常用设计模式(面试常考)
設計模式——Singleton(單例模式)
(1)定義:在程序運行期間,確保類的實例只有一個,并且提供了一個公共的入口點。實現的思路就是將構造函數私有,并且提供一個全局靜態的方法返回一個實例。
(2)應用場景:
多線程中的線程池、應用程序的日志對象、數據庫的連接池、應用的配置對象、緩存等常常被設計成單例。
(3)示例代碼:
簡單版(餓漢模式):
public class Singleton {private static Singleton instance = new Singleton(); //餓漢模式:立即初始化private Singleton() { } ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//私有化構造器public static Singleton getInstance() { ? ? ? ? ? ? ? ? ? ? ?//提供公有的單例訪問點return instance;}}雙重檢查版(懶漢模式):
public class Singleton{private volatile static Singleton instance; ? //懶漢模式:延時到用時才初始化private Singleton() { }public static Singleton getInstance() {if(instance==null) {synchronized (Singleton.class) { ?//塊避免多線程并發,同步塊+雙重檢查if(instance==null) ? ? ? ? ? ? ?instance = new Singleton();}}return instance;}}設計模式——Simple Factory(簡單工廠)設計模式
(1)定義:提供一個抽象產品(父類),由一個工廠類根據當前環境決定創建出哪一種實際產品(子類)的實例。
(2)應用場合:
Spring中作為DI容器使用時,可以看作就是一個工廠。又如Spring事務處理時需要一個抽象的產品“事務管理器”——PlatformTransactionManager,實際配置的則是具體的事務管理,如HibernateTransactionManager或者是DataSourceTransactionManager。當然Spring本身的功能非常復雜,用到的遠遠不僅是簡單工廠一個模式。
(3)示例代碼:
interface Vehicle{ ? ? ? ?//車輛抽象父類void run();}class Car implements Vehicle{ ? ?//小轎車子類public void run() {System.out.println("---小車在行駛---");}}class Tank implements Vehicle{ ?//坦克子類public void run() {System.out.println("---轟隆隆,坦克在行駛---");}}class Factory{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? //工廠類public static Vehicle getVehicle(String name) {if("tank".equals(name)) { ? ? ? ? ? ? //根據條件返回子類return new Tank();}else {return new Car();}}}設計模式——Proxy(代理)模式
(1)定義:創造一個代理類出來,包裝并替原對象進行操作。
(2)應用場景:
攔截器、AOP和ORM的懶加載等地方都使用了代理模式。
(3)示例:
//接口public interface UserDao{void save();}//目標類public class UserDaoImpl implements UserDao{public void save(){System.out.println("保存用戶");}}//代理類public class UserDaoProxy implements UserDao{private UserDao target;public void setTarget(UserDao userDao){this.target = userDao;}public void save(){System.out.println("---預處理---"); ? ? ? ? //注入增強代碼this.target.save();System.out.println("---后處理---"); ? ? ? ? //注入增強代碼}}想要學習更多的基礎開發知識和可能遇到的面試問題可以看我另外一篇文章:
原文鏈接:https://blog.csdn.net/qq_55917018/article/details/122187021
總結
以上是生活随笔為你收集整理的Java常用设计模式(面试常考)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: superviseddescent (S
- 下一篇: 【软件开发底层知识修炼】二十四 ABI之