Java介面———工廠方法設計模式
介面是實現多重繼承的途徑,而生成遵循某個介面的物件的典型方法就是工廠方法設計模式。工廠方法與直接呼叫構造器不同,直接呼叫構造器,會導致物件的生成與物件的使用耦合性太強,使得程式碼不夠靈活,而工廠方法則能夠很好的使兩者分離。而且工廠方法將完全和介面實現分離,這樣也使得我們可以透明的將某個實現替換為另一個實行。
下面是工廠方法的結構:
package Test_1;
interface Service{
void method1();
void method2();
}
interface ServiceFactory{
Service getService();
}
class Implements1 implements Service{
public void method1(){ System.out.println("Implements1.method1");}
public void method2(){ System.out.println("Implements1.method2");}
}
class Implements1Factory implements ServiceFactory{
public Service getService(){
return new Implements1();
}
}
class Implements2 implements Service{
public void method1() { System.out.println("Implements2.method1");}
public void method2() { System.out.println("Implements2.method2");}
}
class Implements2Factory implements ServiceFactory{
public Service getService(){
return new Implements2();
}
}
public class Factories {
public static void serviceConsumer(ServiceFactory fact){
Service s = fact.getService();
s.method1();
s.method2();
}
public static void main(String[] args){
serviceConsumer(new Implements1Factory());
serviceConsumer(new Implements2Factory());
}
}
下面是輸出結果:
Implements1.method1
Implements1.method2
Implements2.method1
Implements2.method2
根據不同介面可以提供不同的實現方法,而具體的實現方法也與工廠方法分離。不明白的朋友多敲敲程式碼就能夠理解了我覺得。
通過匿名類實現的簡化工廠方法設計模式如下:
interface Service{
void method1();
void method2();
}
interface ServiceFactory{
Service getService();
}
class Implements1 implements Service{
public void method1(){ System.out.println("Implements1.method1");}
public void method2(){ System.out.println("Implements1.method2");}
public static ServiceFactory Implements1Factory = new ServiceFactory(){
public Service getService(){
return new Implements1();
}
};
}
class Implements2 implements Service{
public void method1() { System.out.println("Implements2.method1");}
public void method2() { System.out.println("Implements2.method2");}
public static ServiceFactory Implements2Factory = new ServiceFactory(){
public Service getService(){
return new Implements2();
}
};
}
public class Factories {
public static void serviceConsumer(ServiceFactory fact){
Service s = fact.getService();
s.method1();
s.method2();
}
public static void main(String[] args){
serviceConsumer(Implements1.Implements1Factory);
serviceConsumer(Implements2.Implements2Factory);
}
}
通過匿名類使得程式碼簡單優雅了許多,而且也不再需要具體的ServiceFactory類了。
相關推薦
Java介面———工廠方法設計模式
介面是實現多重繼承的途徑,而生成遵循某個介面的物件的典型方法就是工廠方法設計模式。工廠方法與直接呼叫構造器不同,直接呼叫構造器,會導致物件的生成與物件的使用耦合性太強,使得程式碼不夠靈活,而工廠方法則能夠很好的使兩者分離。而且工廠方法將完全和介面實現分離,這樣也
JAVA工廠方法設計模式:Factory Method
wangking717 寫道 工廠方法模式(Factory Method):定義一個建立產品物件的工廠介面,將實際建立工作推遲到子類當中。這樣進一步抽象化的好處使得系統在不修改具體工廠的情況下進行無限擴充套件,符合設計模式的開閉原則,即對擴充套件開放,對修改關閉。 工廠方法
Java多執行緒-57-工廠方法設計模式
這篇,我們來介紹工廠方法模式。工廠方法模式和前面的簡單工廠模式區別就是,我們先定義一個Factory的介面,裡面寫一個createAnimal的方法。然後Dog就建立DogFactory工廠類,Cat就建立CatFactory工廠類。如果還有其他動物,就建立其他動物的工廠類。這樣我們就不用去修改
Java 介面與模組設計模式
一、JDK1.8前的介面 1.狹義的定義:interface(關鍵字) 介面名 {} 2.廣義的定義:介面就相當於定義了,一個規則,我們要想使用這個介面,就必須遵守這個規則 注:定義的是jdk1
Java中常見的設計模式---簡單工廠模式、工廠方法模式和單例模式
在講設計模式之前,我們首先來說一下面向物件思想的設計原則,在實際的開發中,我們要想更深入的瞭解面向物件思想,就必須熟悉前人總結過的面向物件的思想的設計原則:1.單一職責原則:“高內聚,低耦合”,也就是說,每個類應該只有一個職責,對外只能提供一種功能,而引起類變化的原因應該只有
Java 求一段代碼運行所需要的時間——模板方法設計模式
ava rac xtend trac time ring string .get args 原理:結束時間-開始時間 currentTimeMillis abstract class Demo{ public final void getTime(){
Java進階篇設計模式之二 ----- 工廠模式
class computer 社會 進階 輕松 override out 是否 return 前言 在上一篇中我們學習了單例模式,介紹了單例模式創建的幾種方法以及最優的方法。本篇則介紹設計模式中的工廠模式,主要分為簡單工廠模式、工廠方法和抽象工廠模式。 簡單工廠模式 簡單
java 模板方法設計模式(TemplateMethod)
java 模板方法設計模式(TemplateMethod) 1.模板方法設計模式(TemplateMethod) 2.模板方法的實現 1.模板方法設計模式(TemplateMethod) 抽象類體現的就是一種
Java進階篇設計模式之十一 ---- 策略模式和模板方法模式
前言 在上一篇中我們學習了行為型模式的訪問者模式(Visitor Pattern)和中介者模式(Mediator Pattern)。本篇則來學習下行為型模式的兩個模式,策略模式(Strategy Pattern)和模板模式(Mediator Pattern)。 策略模式 簡介 策略模式(Stra
Think in Java反芻筆記(5)---介面之策略設計模式
在Think in Java 的第九章介面中在9.3(完全解耦) 節中看到一個程式碼,貼出來如下: import java.util.*;
Java設計模式之一——模板方法設計模式(Template Method)
設計原則:不要重複 DRY(Don’t Repeat Yourself,不要複製自己) OAOO(Once and Only once,僅此一次):避免程式碼重複 GOF給出的模板方法模式定義如下: Define the skeleton of an algorith
javaSE (三十八)設計模式 ( 單例設計模式(餓漢式/懶漢式)、簡單工廠模式、工廠模式、介面卡模式、模板方法設計模式)
1、單例設計模式(餓漢式/懶漢式): 概念:保證類在記憶體中只有一個物件 思路: 私有構造方法,其他類不能再訪問該構造方法了 建立本類物件(就在本類裡建立),將物件的應用作為成員變數,並私有靜態化(在這裡又分為餓漢式和懶漢式,餓漢式直接引用連線物件,而懶漢式在第二步先建
java靜態工廠方法與工廠模式
靜態工廠方法和工廠模式很像,但是在java中還是有很大區別的。 (一)靜態工廠方法vs工廠模式 對於一個類來說,為了讓客戶端獲得一個自身的例項,最常用的方法就是提供一個公有的構造器。除了這種使用構造器的方法之外,對於單個類來說,我們可以定義靜態工廠方
【JAVA】基礎:設計模式(單例設計模式,工廠設計模式)
設計模式:解決某一類問題最行之有效的方法。 java中有23種設計模式。 建立型模式(5種):工廠方法模式,抽象工廠模式,單例模式,建造者模式,原型模式。 結構型模式(7種):介面卡模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。 行為型模式(11種):策略模式、模板方法
Java設計模式(九):模板方法設計模式
1. 應用場景 模板模式就是通過抽象類來定義一個邏輯模板,邏輯框架、邏輯原型,然後將無法決定的部分抽象成抽象類交由子類來實現,一般這些抽象類的呼叫邏輯還是在抽象類中完成的。這麼看來,模板就是定義一個框架,比如蓋房子,我們定義一個模板:房子要封閉,有門,有窗等等,但是要什麼樣的門,什麼樣的
設計模式之工廠方法(FactoryMethod)模式
在五大設計原則的基礎上經過GOF(四人組)的總結,得出了23種經典設計模式,其中分為三大類:建立型(5種)、結構型(7種)、行為型(11種)。今天對建立型中的工廠方法(FactoryMethod)模式的思想進行了一下複習和實踐,在此也做一下記錄。同樣,理解或實踐不到位的地方,希望走過路過的看官指正一下!
Java實現工廠方法模式
8.3 工廠方法模式實現 將之前簡單工廠實現的計算器以工廠方法模式去實現。 結構圖 先構建一個工廠介面 public interface IFactory { Operation createOperation(); } 加減乘除各建一
java中代理設計模式與工廠類設計模式的綜合應用
package cn.mdln.study2; public class TestDemo11 { /** * 主方法是客戶端,只關心取得通過工廠類取得例項化物件,不關係到底工廠類如何取得, * 更不會關係主題類是如何例項化介面的,才不會關中間有經歷過那寫不為人知的操作
java模板方法設計模式(Template Method)
模板方法設計模式(Template Method):定義一個演算法骨架,而將一些步驟方法(方法沒必要一定是抽象的)延遲到子類中實現。該模式使得不同的子類可以不改變一個演算法的結構,只重定義該演算法的某些特定步驟方法。 舉個圖形例子: public class Test{
java中幾種設計模式(單例模式,介面卡模式,簡單工廠模式)
1、單例模式:也分餓漢式單例模式(建立物件)與懶漢式單例模式(未建立物件)程式碼實現:餓漢式單例模式:懶漢式單例模式:2、介面卡模式:介面:實現介面的類:實現介面某個方法的類:3、簡單工廠模式:介面:類1:類2:工廠類:測試類: