JAVA常用設計模式(一、單例模式、工廠模式)


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();
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM