java靜態工廠方法
Ⅰ java與模式,簡單工廠模式的方法為什麼是靜態的
在不需要用對象成員的時候就用類成員,這個沒什麼好說的... 一定要說的話靜態方法調用速度快
Ⅱ 為什麼要在JAVA工廠模式中使用靜態方法
工廠模式是一種封裝對象創建的方法。
如果不使用工廠模式,你就需要直接使用構造方法來創建對象:Foo x = new Foo()
使用工廠模式,就可以取而代之的調用工廠方法:Foo x = Foo.create()
工廠類的構造方法被標記為private,所以構造方法除了在類的內部被調用以外就不能夠被訪問。
工廠類的其他方法被標記為static,這樣就不需要在調用該方法之前必須首先擁有一個該類的對象。
使用工廠模式有一些好處。
Ⅲ 求教:Java中 使用靜態工廠方法的作用
這種方法多用在業務邏輯方面,向外面只暴露介面,隱藏具體演算法細節。靈活度高,容易擴展。 例如結算工資,每個部門,每個人的工資可能不一樣(包括基本工資,加層,項目獎金,稅等等一些列演算法)。 你只需要一個口介面,具體實現交給具體類去做,這樣你就可以根據不同的類,得到不同的結果。
Ⅳ JAVA 靜態工廠方法
//只管描述,其他
class DrinkNotFoundException extends Exception{
DrinkNotFoundException(){}
DrinkNotFoundException(String message){
super(message);
}
}
class Drink{ //工廠類
static Object getDrink(int drinkType) throws DrinkNotFoundException{ //工廠靜態方法
switch(drinkType){
case 1: return new Coffee();
default:throw new DrinkNotFoundException("沒有相對應的飲料類型");
}
}
}
class Coffee{
public void taste(){
System.out.println("咖啡能提神。");
}
}
public class Main{
public static void main(String args[]){
try {
Coffee coffee = (Coffee)Drink.getDrink(1);//正常,這就是靜態工廠方法
coffee.taste();
Coffee c = (Coffee)Drink.getDrink(0);//拋出異常
} catch (DrinkNotFoundException e) {
e.printStackTrace();
}
}
}
Ⅳ effective java 中的靜態工廠方法是什麼意思。
它的意思是把一個常用公共操作統一分類定義到一些工廠類中,說是工廠類其實就是因為你在給類命名的時候使用了Factory。你也可以換成其名字,不過統一定義成這個命名在團隊開發中易與相互理解,知道這是一個工具類而已,這樣可以節省代碼,使代碼更健壯。
Ⅵ JAVA中靜態工廠方法跟new語句的差別!
靜態方法創建類的實例的時候, 有可能不是new一個(也有可能new一個)而是把一個已經有的對象返回回去了回. 其實沒什麼"根本"差別, 裡面一般還是調用new, 只是一答些情況下沒有在靜態方法裡面new而是直接拿一個以前已經new出來的對象返回回去了.
Ⅶ Java問題,為什麼下面工廠類中要使用靜態方法
工廠類需要被重復多次使用,static的好處是,能夠出淤泥不染,把它當成一個工具,裡面的東西被單次賦值之後,可以再次恢復。不影響二次重用。。。
Ⅷ java帶有多線程同步機制的靜態工廠模式怎麼寫
publicclassT{
;
privateT(){}
publicstaticTgetInstance(){
if(null==instance){
synchronized(T.class){
if(null==instance){
instance=newT();
}
}
}
returninstance;
}
}
Ⅸ Java的幾個工廠方法解析
Java工廠模式可分為三種:
1.靜態工廠模式
2.工廠方法模式
3.抽象工廠模式
一、靜態工廠模式:用靜態的方法實現,其創建的對象具有一定的特性
舉例如下:
Vehicle類:
public abstract class Vehicle
{
private String name;
public Vehicle (){
super();
}
public Vehicle (String name){
super();
this.name=name;
}
public abstract void run();
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
}
Bus類:
public class Bus extends Vehicle
{
private String name;
public Bus(){}
public Bus(String name){
super(name);
}
@Override
public abstract void run(){
System.out.println("Bus is running");
}
}
Car類:
public class Car extends Vehicle
{
private String name;
public Car(){}
public Car(String name){
super(name);
}
@Override
public abstract void run(){
System.out.println("Car is running");
}
}
靜態工廠類:
(靜態工廠創建一個對象,
靜態工廠創建的對象一般都有一個共同的特性,
繼承自某一個類,
或者引用一個介面)
public class StaticFactory{
public static Object getInstance(String className){
Object instance=null;
try{
Class c=Class.forName(className);
instance=c.newInstance();
}catch(Exception e){}
return instance;
}
public static Object getInstance(String className,Object ...args){
Class c=null;
try{
c=Class.forName(className);
}catch(Exception e){}
Constructor[] cons=c.getConstructors();
Object instance=null;
for(Constructor con:cons){
Class<?>[] cs=con.getParmeterTypes();
if(cs.length>0){
boolean isConstructor=true;
for(int i=0;i<cs.length;i++){
Class t=cs[i];
if(!t.isInstance(args[i])){
isConstructor=false;
}
}
if(isConstructor){
try{
instance=con.newInstance(args);
break;
}catch(Exception e){}
}else{
continue;
}
}
}
return instance;
}
}
二、工廠方法模式:主要是對各類東西分類生產,但分類生產的對象仍然具有某一特性。
如果說靜態工廠是一個綜合的交通工具建造工廠,
那麼工廠方法模式就是具體分工,分成Bus與Car的工廠,
各自生產各自的產品,但是造出來的還是交通工具。
交通工具製造介面:
public interface VehicleMake{
/**製造交通工具**/
public Vehicle make();
}
Bus製造類:
public class BusMake implements VehicleMake{
@Override
public Vehicle make(){
Vehicle bus=new Bus();
System.out.println("Bus工廠製造了一輛Bus");
return bus;
}
}
Car製造類:
public class CarMake implements VehicleMake{
@Override
public Vehicle make(){
Vehicle car=new Car();
System.out.println("Car工廠製造了一輛Car");
return car;
}
}
三、抽象工廠模式:抽象工廠生產的對象可能是沒有共同特性的。比如,一個製造工廠BusMake不僅能製造Bus還能生產輪胎wheel等配件,Bus是交通工具,wheel是配件(代碼中有部分類沒具體寫出來只給了類名)
總工廠(抽象工廠總介面):
public interface WheelVehicleMake extends VehicleMake{
/**製造輪胎**/
public Wheel makeWheel();
}
輪子BusMake:
public class WheelBusMake implements WheelVehicleMake{
@Override
public Vehicle make(){
Vehicle bus=new Bus();
System.out.println("WheelBusMake生產了一輛Bus");
return bus;
}
@Override
public Wheel makeWheel(){
Wheel busWheel=new BusWheel();
System.out.println("WheelBusMake生產了一個Bus輪子");
return busWheel;
}
}
輪子CarMake:
public class WheelCarMake implements WheelVehicleMake{
@Override
public Vehicle make(){
Vehicle car=new Car();
System.out.println("WheelCarMake生產了一輛Car");
return car;
}
@Override
public Wheel makeWheel(){
Wheel carWheel=new CarWheel();
System.out.println("WheelCarMake生產了一個Car輪子");
return carWheel;
}
}
Ⅹ 靜態工廠方法代替構造函數中
Spring中大量使用單例模式和工廠模式,工廠模式可以將Java對象的調用者從被調用者的實現邏輯中版分離出來,調用者只需要關權心被調用者必須滿足的規則(介面,或者高層抽象類),而不必關心實例實現的具體過程。這是面向對象介面編程的優勢,能提高程序的解耦。工廠模式是設計模式里最常用,也是最基礎的一種設計模式,因為最簡單的道理,絕大部分的類被定義出來就是為了生成對象的,那麼生成對象就必須進行new操作,工廠方法就是把new的實現分開來。