1. 程式人生 > 資料庫 >sqlserver查詢轉日期格式欄位

sqlserver查詢轉日期格式欄位

基本介紹 1) 抽象工廠模式:定義了一個interface用於建立相關或有依賴關係的物件簇,而無需指明具體的類 2) 抽象工廠模式可以將簡單工廠模式工廠方法模式進行整合。 3) 從設計層面看,抽象工廠模式就是對簡單工廠模式的改進(或者稱為進一步的抽象)。 4) 將工廠抽象成兩層,AbsFactory(抽象工廠) 和 具體實現的工廠子類。程式設計師可以根據建立物件型別使用對應的工廠子類。這樣將單個的簡單工廠類變成了工廠簇,更利於程式碼的維護和擴充套件。 使用抽象工廠模式來完成披薩專案.   類圖:   

披薩類:

//將Pizza 類做成抽象
public abstract class Pizza {
    
protected String name; //名字 //準備原材料, 不同的披薩不一樣,因此,我們做成抽象方法 public abstract void prepare(); public void bake() { System.out.println(name + " baking;"); } public void cut() { System.out.println(name + " cutting;"); } //打包 public void box() { System.out.println(name
+ " boxing;"); } public void setName(String name) { this.name = name; } }

北京乳酪披薩:

public class BJCheesePizza extends Pizza {

    @Override
    public void prepare() {
        // TODO Auto-generated method stub
        setName("北京的乳酪pizza");
        System.out.println(" 北京的乳酪pizza 準備原材料");
    }

}

北京胡椒披薩:

public class BJPepperPizza extends Pizza {
    @Override
    public void prepare() {
        // TODO Auto-generated method stub
        setName("北京的胡椒pizza");
        System.out.println(" 北京的胡椒pizza 準備原材料");
    }
}

倫敦乳酪披薩:

public class LDCheesePizza extends Pizza{

    @Override
    public void prepare() {
        // TODO Auto-generated method stub
        setName("倫敦的乳酪pizza");
        System.out.println(" 倫敦的乳酪pizza 準備原材料");
    }
}

倫敦胡椒披薩:

public class LDPepperPizza extends Pizza{
    @Override
    public void prepare() {
        // TODO Auto-generated method stub
        setName("倫敦的胡椒pizza");
        System.out.println(" 倫敦的胡椒pizza 準備原材料");
    }
}

抽象層介面:

import com.atguigu.factory.absfactory.pizzastore.pizza.Pizza;

//一個抽象工廠模式的抽象層(介面)
public interface AbsFactory {
    //讓下面的工廠子類來 具體實現
    public Pizza createPizza(String orderType);
}

工廠子類:(北京的)

import com.atguigu.factory.absfactory.pizzastore.pizza.BJCheesePizza;
import com.atguigu.factory.absfactory.pizzastore.pizza.BJPepperPizza;
import com.atguigu.factory.absfactory.pizzastore.pizza.Pizza;

//這是工廠子類
public class BJFactory implements AbsFactory {

    @Override
    public Pizza createPizza(String orderType) {
        System.out.println("~使用的是抽象工廠模式~");
        // TODO Auto-generated method stub
        Pizza pizza = null;
        if(orderType.equals("cheese")) {
            pizza = new BJCheesePizza();
        } else if (orderType.equals("pepper")){
            pizza = new BJPepperPizza();
        }
        return pizza;
    }

}

工廠子類:(倫敦的)

import com.atguigu.factory.absfactory.pizzastore.pizza.LDCheesePizza;
import com.atguigu.factory.absfactory.pizzastore.pizza.LDPepperPizza;
import com.atguigu.factory.absfactory.pizzastore.pizza.Pizza;

public class LDFactory implements AbsFactory {

    @Override
    public Pizza createPizza(String orderType) {
        System.out.println("~使用的是抽象工廠模式~");
        Pizza pizza = null;
        if (orderType.equals("cheese")) {
            pizza = new LDCheesePizza();
        } else if (orderType.equals("pepper")) {
            pizza = new LDPepperPizza();
        }
        return pizza;
    }

}

訂購:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import com.atguigu.factory.absfactory.pizzastore.pizza.Pizza;

public class OrderPizza {

    AbsFactory factory;

    // 構造器
    public OrderPizza(AbsFactory factory) {
        setFactory(factory);
    }

    private void setFactory(AbsFactory factory) {
        Pizza pizza = null;
        String orderType = ""; // 使用者輸入
        this.factory = factory;
        do {
            orderType = getType();
            // factory 可能是北京的工廠子類,也可能是倫敦的工廠子類
            pizza = factory.createPizza(orderType);
            if (pizza != null) { // 訂購ok
                pizza.prepare();
                pizza.bake();
                pizza.cut();
                pizza.box();
            } else {
                System.out.println("訂購失敗");
                break;
            }
        } while (true);
    }

    // 寫一個方法,可以獲取客戶希望訂購的披薩種類
    private String getType() {
        try {
            BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("input pizza 種類:");
            String str = strin.readLine();
            return str;
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }
}

測試:呼叫對應的北京或倫敦的工廠

public class PizzaStore {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //new OrderPizza(new BJFactory());
        new OrderPizza(new LDFactory());
    }

}

工廠模式在JDK-Calendar 應用的原始碼分析 JDK 中的Calendar類中,就使用了簡單工廠模式
import java.util.Calendar;

public class Factory {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        // getInstance 是 Calendar 靜態方法,通過類名呼叫的
        Calendar cal = Calendar.getInstance();
        // 注意月份下標從0開始,所以取月份要+1
        System.out.println("年:" + cal.get(Calendar.YEAR));
        System.out.println("月:" + (cal.get(Calendar.MONTH) + 1));       
        System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH));
        System.out.println("時:" + cal.get(Calendar.HOUR_OF_DAY));
        System.out.println("分:" + cal.get(Calendar.MINUTE));
        System.out.println("秒:" + cal.get(Calendar.SECOND));
        
        

        
    }

}

找到getInstance 方法,在jdk原始碼的Calendar類的1611行:

這了呼叫了createCalendar 方法,根據你的時區和地區返回一個例項,找到這個方法:1658行

得到一個provider,然後判斷是否為空,不為空呼叫provider的getInstance方法,返回的是Calendar

工廠模式小結 1) 工廠模式的意義 將例項化物件的程式碼提取出來,放到一個類中統一管理和維護,達到和主專案的依賴關係的解耦。從而提高專案的擴充套件和維護性。 2)三種工廠模式 (簡單工廠模式、工廠方法模式、抽象工廠模式) 3) 設計模式的依賴抽象原則
  • 建立物件例項時,不要直接 new 類, 而是把這個new 類的動作放在一個工廠的方法中,並返回。有的書上說,變數不要直接持有具體類的引用。
  • 不要讓類繼承具體類,而是繼承抽象類或者是實現interface(介面)
  • 不要覆蓋基類中已經實現的方法。