關於《java與模式》一書中工廠方法模式的異議?
關於《java與模式》一書中工廠方法模式的異議?
關於工廠方法的一點討論,我們知道工廠方法屬於型別建立模式,而抽象工廠
屬於物件建立模式,並且所謂的類建立模式就是把建立工作延遲到子類,而
物件建立模式則將延遲到另一個物件。
並且設計模式中指出,類模式處理類和子類子間的關係,這些關係透過繼承建立,
是靜態的,在編譯時刻便確定下來。物件模式則處理物件之間的關係,是動態的,
執行時刻是可以變化的,更具動態性。
工廠方法由於屬於型別建立模式,因此它的建立工作由子類完成,而不是使用物件進行建立,
並且在《設計模式》中工廠方法的動機一節有一個示例,
它的類大致如下:
//抽象產品,可以是介面或者抽象類
public abstract class document {
public void open(){
...............
...............
}
public void close(){
...............
...............
}
public void save();
}
//具體的產品,
public class Mydocument extends document{
public void open(){
.............
..............
}
...............
}
我們工廠方法
public abstract class appliaction {
//該方法是工廠方法,由子類實現
public abstract document createDocument();
//模板方法,在方法中使用了工廠方法
pubic void newDocument(){
//使用工廠方法,獲得doc,而實際有子類完成,
//這裡可以看出,物件的建立,是透過繼承來實現,是靜態的,編譯時已經確定
//而不是透過物件的委託來實現,故屬於類建立型模式
Document doc=createDocument();
doc.open();
....................
doc.save();
}
}
具體的工廠實現由子類來實現工廠方法:
public class myappliaction extends appliaction {
public document createDocument(){
return new Mydocument();
}
}
大家可以看出,這其實使用template method模式,抽象方法
宣告建立物件,而模板方法完成業務邏輯,她使用抽象建立方法,由繼承
來獲得產品,而不是使用物件來建立物件的。
並且大家仔細看<設計模式>71頁的結構圖,裡的creator裡有兩個方法,
其中一個使用factorymethod方法,另外一個就是普通的方法,
anOperation它呼叫了工廠方法,
product=factorymethod()來獲得產品物件。
現在問題就出現在這裡,而另外一本書閻宏的《java與模式》的167地結構圖中
卻沒有把這點作出標記,並且提供的示例,也不像最初<設計模式>中的工廠方法的例子,
他的示例如下:
//抽象工廠,而這裡卻沒有方法使用工廠方法:
public interface Creator{
/**
* 工廠方法
*/
public Product factory();
}
public class ConcreteCreator1 implements Creator
{
/**
* 工廠方法
*/
public Product factory()
{
return new ConcreteProduct1();
}
}
而客戶端卻使用;
public static void main(String[] args){
creator1 = new ConcreteCreator1();
prod1 = creator1.factory();
}
我感覺這樣示例有問題,或者不妥,或者不能表達原意。
在客戶端,他的物件建立使用了
prod1 = creator1.factory();
這樣顯然使用物件creator1來建立物件的,而不是使用繼承,類模式來完成
建立的。這與工廠方法的原意,類模式,把建立工廠延遲到子類實現,等有衝突。
這樣想物件建立模式。
我的理解不知是否有問題?我花了很多時間在這上面,國外的其他書中的例子與閻宏的也不同。
大家是怎樣理解的??可以討論
關於工廠方法的一點討論,我們知道工廠方法屬於型別建立模式,而抽象工廠
屬於物件建立模式,並且所謂的類建立模式就是把建立工作延遲到子類,而
物件建立模式則將延遲到另一個物件。
並且設計模式中指出,類模式處理類和子類子間的關係,這些關係透過繼承建立,
是靜態的,在編譯時刻便確定下來。物件模式則處理物件之間的關係,是動態的,
執行時刻是可以變化的,更具動態性。
工廠方法由於屬於型別建立模式,因此它的建立工作由子類完成,而不是使用物件進行建立,
並且在《設計模式》中工廠方法的動機一節有一個示例,
它的類大致如下:
//抽象產品,可以是介面或者抽象類
public abstract class document {
public void open(){
...............
...............
}
public void close(){
...............
...............
}
public void save();
}
//具體的產品,
public class Mydocument extends document{
public void open(){
.............
..............
}
...............
}
我們工廠方法
public abstract class appliaction {
//該方法是工廠方法,由子類實現
public abstract document createDocument();
//模板方法,在方法中使用了工廠方法
pubic void newDocument(){
//使用工廠方法,獲得doc,而實際有子類完成,
//這裡可以看出,物件的建立,是透過繼承來實現,是靜態的,編譯時已經確定
//而不是透過物件的委託來實現,故屬於類建立型模式
Document doc=createDocument();
doc.open();
....................
doc.save();
}
}
具體的工廠實現由子類來實現工廠方法:
public class myappliaction extends appliaction {
public document createDocument(){
return new Mydocument();
}
}
大家可以看出,這其實使用template method模式,抽象方法
宣告建立物件,而模板方法完成業務邏輯,她使用抽象建立方法,由繼承
來獲得產品,而不是使用物件來建立物件的。
並且大家仔細看<設計模式>71頁的結構圖,裡的creator裡有兩個方法,
其中一個使用factorymethod方法,另外一個就是普通的方法,
anOperation它呼叫了工廠方法,
product=factorymethod()來獲得產品物件。
現在問題就出現在這裡,而另外一本書閻宏的《java與模式》的167地結構圖中
卻沒有把這點作出標記,並且提供的示例,也不像最初<設計模式>中的工廠方法的例子,
他的示例如下:
//抽象工廠,而這裡卻沒有方法使用工廠方法:
public interface Creator{
/**
* 工廠方法
*/
public Product factory();
}
public class ConcreteCreator1 implements Creator
{
/**
* 工廠方法
*/
public Product factory()
{
return new ConcreteProduct1();
}
}
而客戶端卻使用;
public static void main(String[] args){
creator1 = new ConcreteCreator1();
prod1 = creator1.factory();
}
我感覺這樣示例有問題,或者不妥,或者不能表達原意。
在客戶端,他的物件建立使用了
prod1 = creator1.factory();
這樣顯然使用物件creator1來建立物件的,而不是使用繼承,類模式來完成
建立的。這與工廠方法的原意,類模式,把建立工廠延遲到子類實現,等有衝突。
這樣想物件建立模式。
我的理解不知是否有問題?我花了很多時間在這上面,國外的其他書中的例子與閻宏的也不同。
大家是怎樣理解的??可以討論
相關文章
- Java 設計模式之工廠方法模式與抽象工廠模式Java設計模式抽象
- c#中工廠模式詳解C#模式
- Java 關於策略模式+簡單工廠模式下的思考Java模式
- java設計模式-工廠方法模式Java設計模式
- 工廠方法模式與抽象工廠模式的區別模式抽象
- 我的Java設計模式-工廠方法模式Java設計模式
- 關於工廠模式的思考模式
- 關於工廠模式的一點個人看法模式
- 抽象工廠模式-與-工廠方法模式區別抽象模式
- Java設計模式之工廠方法模式Java設計模式
- Java設計模式(二):工廠方法模式Java設計模式
- Java設計模式3:工廠方法模式Java設計模式
- Java常用設計模式之工廠方法模式Java設計模式
- Java設計模式(工廠方法設計模式)Java設計模式
- java設計模式之一 工廠模式Java設計模式
- 一篇搞定工廠模式【簡單工廠、工廠方法模式、抽象工廠模式】模式抽象
- Java基礎-工廠方法模式Java模式
- JAVA設計模式 3【建立型】理解工廠模式與抽象工廠模式Java設計模式抽象
- Java設計模式學習筆記——工廠模式與抽象工廠模式Java設計模式筆記抽象
- 請教一個關於工廠模式的問題模式
- 設計模式-工廠模式二(工廠方法模式)設計模式
- JAVA-反射與工廠模式Java反射模式
- 淺識JAVA設計模式——工廠模式(一)Java設計模式
- 建立型模式之單例模式與工廠模式(一)模式單例
- 設計模式之工廠方法模式|抽象工廠模式設計模式抽象
- 重學 Java 設計模式:實戰工廠方法模式Java設計模式
- JAVA設計模式之 工廠方法模式【Factory Method Pattern】Java設計模式
- 大話設計模式讀書筆記7——工廠方法模式設計模式筆記
- 請介紹關於mvc模式的書?MVC模式
- 設計模式-簡單工廠、工廠方法模式、抽象工廠模式設計模式抽象
- 設計模式 - 工廠方法模式設計模式
- 設計模式-工廠方法模式設計模式
- 設計模式~~~工廠方法模式設計模式
- 設計模式——工廠方法模式設計模式
- 建立型模式————工廠方法模式模式
- 【設計模式】工廠方法模式設計模式
- 設計模式之工廠模式!深入解析簡單工廠模式,工廠方法模式和抽象工廠模式設計模式抽象
- Java設計模式(工廠模式)Java設計模式