JAVA設計模式之單例模式
import java.util.HashMap; import java.util.Map; /** * 設計模式之單例模式 * 單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。 * 這種模式涉及到一個單一的類,該類負責創建自己的對象,同時確保只有單個對象被創建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問, * 不需要實例化該類的對象。 * * 1.單例模式只能有一個實例 * 2.單例必須自己創建自己的唯一實例 * 3.單例必須給其他所有對象提供這一實例 * * 主要解決:一個全局使用的類頻繁地創建與銷毀。 * * 何時使用:當您想控制實例數目,節省系統資源的時候。 * * @author dyq * */ public class DesignPatternSingleton { public static void main(String[] args) { SlackerSingletonObject slackerSingletonObject = SlackerSingletonObject.getInstance(); HungrySingletonObject hungrySingletonObject = HungrySingletonObject.getInstance(); EnumSingletonObject enumSingletonObject = EnumSingletonObject.INSTANCE; } } /** * 懶漢模式-單例模式 * @author dyq * */ class SlackerSingletonObject{ private static SlackerSingletonObject instance; private SlackerSingletonObject() { System.out.println("加載SlackerSingletonObject"); } public static synchronized SlackerSingletonObject getInstance() { if(instance==null) { instance = new SlackerSingletonObject(); } return instance; } public static Map<String,Object> getProFile(){ Map<String,Object> map = new HashMap<String,Object>(); map.put("jdbcDriver", "oracle"); return map; } } /** * 餓漢模式-單例模式 */ class HungrySingletonObject{ private static HungrySingletonObject instance = new HungrySingletonObject(); private String name ; private HungrySingletonObject() { System.out.println("加載HungrySingletonObject"); } public static HungrySingletonObject getInstance() { return instance; } public static Map<String,Object> getProFile(){ Map<String,Object> map = new HashMap<String,Object>(); map.put("jdbcDriver", "oracle"); return map; } } /** * 枚舉--單例模式 */ enum EnumSingletonObject{ INSTANCE; public static Map<String,Object> getProFile(){ Map<String,Object> map = new HashMap<String,Object>(); map.put("jdbcDriver", "oracle"); return map; } }
JAVA設計模式之工廠模式
/** * 設計模式之工廠模式 * 工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。 * 在工廠模式中,我們在創建對象時不會對客戶端暴露創建邏輯,並且是通過使用一個共同的接口來指向新創建的對象。 * * 主要解決:主要解決接口選擇的問題。 * 何時使用:我們明確地計划不同條件下創建不同實例時。 * 如何解決:讓其子類實現工廠接口,返回的也是一個抽象的產品。 * 關鍵代碼:創建過程在其子類執行。 * @author dyq * */ public class DesignPatternFactory { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); //獲取 Circle 的對象,並調用它的 draw 方法 Shape shape1 = shapeFactory.getShape("CIRCLE"); //調用 Circle 的 draw 方法 shape1.draw(); //獲取 Rectangle 的對象,並調用它的 draw 方法 Shape shape2 = shapeFactory.getShape("RECTANGLE"); //調用 Rectangle 的 draw 方法 shape2.draw(); //獲取 Square 的對象,並調用它的 draw 方法 Shape shape3 = shapeFactory.getShape("SQUARE"); //調用 Square 的 draw 方法 shape3.draw(); } } interface Shape{ public void draw(); } class Rectangle implements Shape{ @Override public void draw() { System.out.println("Inside Square::draw() method."); } } class Circle implements Shape{ @Override public void draw() { System.out.println("Inside Circle::draw() method."); } } class Square implements Shape { @Override public void draw() { System.out.println("Inside Square::draw() method."); } } class ShapeFactory { public Shape getShape(String shapeType) { if(shapeType==null) { return null; } if(shapeType.equalsIgnoreCase("CIRCLE")) { return new Circle(); }else if(shapeType.equalsIgnoreCase("RECTANGLE")) { return new Rectangle(); }else { return new Square(); } } }
