抽象倒置

抽象倒置（abstraction inversion）是程序设计裡的反面模式，是指使用者需要的功能在某一物件中，但未在介面中開放，結果是使用者需要用介面重新實現此功能，而不是直接使用內部的功能。這會造成用高階的介面為基礎，實現較低階功能的問題，因此稱為抽象倒置。

可能的缺點有：
 重新實現功能的使用者可能會嚴重低估其運行成本。
 使用者被迫用複雜的機械細節來掩蓋其實現。
 許多使用者試圖解決同一個問題，增加錯誤的風險。

 範例 
專業程式圈內抽象倒置的範例如下：

 Applesoft BASIC和Lua（針對桌上電腦組態的版本）其基礎數值型態是浮點數lua-users c2: Floating Point Accessed 2009-10-12.Programming in Lua : 2.3 - Numbers Accessed 2009-10-12.。Applesoft有實現整数運算，但是是在浮点数运算的基礎上實現的，而且沒有位操作（Lua在Lua 5.2加入了）lua-users c2: Bitwise Operators Accessed 2013-01-15.。Applesoft也不支援位图的 ，因此用Applesoft運行的遊戲和其他程式會比較慢。
 在像Java或C++等面向对象程序设计語言中，要產生代表函式的物件很麻煩（特別在C++11之前，Java 8之前的版本），因為其函式不是頭等物件。C++可以在物件中多載()運算子，讓此物件像函式一樣可以呼叫。但多半還是需要實現新的類別，像是STL裡的FunctorsFunctors in the STL（C++11的lambda函式讓創建物件來代表函式變簡單了）。
 Tom Lord提到Subversion版本控制系統為了抽象倒置付出代價，其只寫的資料庫是建立在可讀寫的資料庫，因此性能不佳sourcefrog : Tom Lord on Subversion。
 在關聯資料庫中用存储程序來處理資料，而不是給程式設計者權限，在關聯資料庫中布署程式，因此需要在資料庫外重新實現查詢功能。例如，讀取大量的資料（極端的例子，整個表），再在應用程式中進行篩選。
 微軟的WinUI 3會系統性的將其創建視窗的標題列改為客製版本，不會考慮終端使用者的顏色設定。若要在Windows 11中讓標題列使用終端使用者的顏色設定，需要再加入客製化程式，將其標題列改為Windows 10的客製版本Title bar customization - Windows apps | Microsoft Learn。

專業程式圈以外的例子有：

 用試算表的lookup函數來複製資料庫的功能。
 在Microsoft Visual Basic中用variant資料型態當迴圈變數，而不使用更直接的整數。

 相關條目 
抽象泄漏

 參考資料 

外部連結
 Abstraction Inversion at Portland Pattern Repository - extensive discussion, much of it taking "abstraction inversion" in the sense of "concealed complexity"

Category:反模式