單例模式
單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一,這種型別的設計模式屬于創建型模式,它提供了一種創建物件的最佳方式,這種模式涉及到一個單一的類,該類負責創建自己的物件,同時確保只有單個物件被創建,這個類提供了一種訪問其唯一的物件的方式,可以直接訪問,不需要實體化該類的物件, 關鍵代碼:建構式是私有的,讓建構式為 private,這樣該類就不會被實體化,餓漢式
在程式啟動或單件模式類被加載的時候,單件模式實體就已經被創建,//餓漢式單例類.在類初始化時,已經自行實體化 public class Singleton { //私有的默認構造子 private Singleton() {} //已經自行實體化 private static Singleton single = new Singleton(); //靜態工廠方法 public static Singleton getInstance() { return single; } }
懶漢式
當程式第一次訪問單件模式實體時才進行創建,//懶漢式單例類.在第一次呼叫的時候實體化 public class Singleton2 { //私有的默認構造子 private Singleton2() {} //注意,這里沒有final private static Singleton2 single=null; //靜態工廠方法 public synchronized static Singleton2 getInstance() { if (single == null) { single = new Singleton2(); } return single; } }
工廠模式
工廠模式在一些設計模式的書中分為簡單工廠模式,工廠方法模式和抽象工廠模式三類,也有把工廠方法模式劃分到抽象工廠模式的,認為工廠方法是抽象工廠模式的特例的一種,就是只有一個要實作的產品介面,工廠方法
工廠方法模式通過一個抽象的工廠類來創建工廠,再由工廠通過一定的方法創造一定的物件,這樣如果有新的產C出現不需要修改已有代碼只要新建一個產品的從子類和工廠的子類就可以啦,簡單代碼如下://抽象工廠類 abstract class Factory{ abstract Product create(); } //工廠A class FactoryA{ public Product create(){ return new ProductA(); }; } //工廠B class FactoryB{ public Product create(){ return new ProductA(); }; } //產品父類 abstract class Product{} //產品子類A class ProductA extends Product{} //產品子類B class ProductB extends Product{} public class App{ public static void main(String[] args){ Product p; Factory f=new FactoryA() //消費者類中創造A產品 p=f.create(); } }-----------------------傻子這樣寫??
抽象工廠模式
抽象工廠模式較好的實作了“開放-封閉”原則,是三個模式中較為抽象,并具一般性的模式,我們在使用中要注意使用抽象工廠模式的條件,//工廠里嵌套工廠,用不同工廠生產不同商品 class Program { static void Main(string[] args) { //實體化惠貧訓鼠工廠 Factory factory = new HPFactory(); string mouseInfo1 = factory.GetMouseFactory().GetMouseInfo(); string keyboard1 = factory.GetKeyboardFactory().GetKeyboardInfo(); //實體化聯想滑鼠工廠 Factory factory2 = new LenoveFactory(); string mouseInfo2 = factory2.GetMouseFactory().GetMouseInfo(); string keyboard2= factory2.GetKeyboardFactory().GetKeyboardInfo(); } }
//工廠創造不同的商品,用同一工廠生產不同商品 interface IProduct1 { public void show(); } interface IProduct2 { public void show(); } class Product1 implements IProduct1 { public void show() { System.out.println("這是1型產品"); } } class Product2 implements IProduct2 { public void show() { System.out.println("這是2型產品"); } } interface IFactory { public IProduct1 createProduct1(); public IProduct2 createProduct2(); } class Factory implements IFactory{ public IProduct1 createProduct1() { return new Product1(); } public IProduct2 createProduct2() { return new Product2(); } } public class Client { public static void main(String[] args){ IFactory factory = new Factory(); factory.createProduct1().show(); factory.createProduct2().show(); } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/153365.html
標籤:Java
上一篇:部署api管理平臺YApi
