java 原廠模式變形的多種應用

來源:互聯網
上載者:User

 原廠模式在項目開發中是使用效率非常高的,意思就是說定義一個用於建立對象的介面,讓子類去決定執行個體化哪一個類。這就是一個工廠類的

接著來一個簡單的例子:

如所示,我們首先定義我們的產品抽象類別介面,也可以是抽象類別:

package factory;public abstract class PlatForm {public void search(){System.out.println("你搜尋的結果是。。。。。。");}public abstract void music();}

下面是一些實作類別

package factory;public class BaiduProduct extends PlatForm{@Overridepublic void music() {System.out.println("baidu music");}}

package factory;public class Qihu360Product extends PlatForm{@Overridepublic void music() {System.out.println("360 music");}}

package factory;public class SogouProduct extends PlatForm{@Overridepublic void music() {System.out.println("sogou music");}}

三個實作類別已經完成,下面我們要來一個工廠的抽象類別
package factory;public abstract class Creator {/** * 建立一個產品對象,其中T 可以為 String Enum Class等  參數可以自己設定 * @param c * @return */public abstract <T extends PlatForm> T createProduct(Class<T> c);}
下面是實作類別

package factory;public class ConcrentCreator extends Creator{@Overridepublic <T extends PlatForm> T createProduct(Class<T> c) {PlatForm plat = null;try {/** * 建立一個用於建立對象的介面,讓子類去確定執行個體化哪一個對象。Factory 方法,讓一個類的執行個體化延遲到子類 */plat = (PlatForm) Class.forName(c.getName()).newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return (T) plat;}}

package factory;public class Client {public static void main(String[] args) {Creator creator = new ConcrentCreator();//在這裡可以把你要執行個體化的類給傳進去,然後即可調用你想要的方法。PlatForm plat = creator.createProduct(BaiduProduct.class);plat.search();plat.music();}}

在這裡面模仿了一個用戶端,就可以輸出你想要的結果。

在原廠模式方法中抽象產品類負責定義產品的共性,實現實物最抽象的定義;creator為產品抽喜建立類,也就是抽象工廠具體如何建立產品類有具體的實現creator的工廠類來完成,工廠類的變種很多,下面,我總結類一個比較通用的源碼。

1:抽象產品類

package factory.total;public abstract class Product {public void method1(){//所有產品的共性}//抽象方法   具體有繼承它的類去實現public abstract void method2();}
2:產品實作類別

package factory.total;public class ConcretProduct1 extends Product{@Overridepublic void method2() {//TODO}}package factory.total;public class ConcretProduct2 extends Product{@Overridepublic void method2() {//TODO}}

3:抽象工廠類

package factory.total;public abstract class Creator {public abstract <T extends Product> T createMethod(Class<T> c);}

4:具體工廠類:

package factory.total;public class ConcreteCreator extends Creator{@Overridepublic <T extends Product> T createMethod(Class<T> c) {Product pro = null;try {pro = (Product) Class.forName(c.getName()).newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return (T) pro;}}

情境類比類

package factory.total;public class Client {public static void main(String[] args) {Creator creator = new ConcreteCreator();Product pro = creator.createMethod(ConcretProduct1.class);pro.method1();pro.method2();}}

其中原廠模式又分為簡單原廠模式,和多級原廠模式,不過這兩種情況,和上一種都比較類似了,其中簡單原廠模式只是簡單的把抽象工廠類去掉,然後把工廠實作類別的方法改成static方法。多級原廠模式是指:例如當我們見到一個比較複雜的項目時,所有的產品類都放到一個工廠類中去初始化會顯得結構不清晰,那麼我們現在就為每一種產品都有自己的一個工廠類;下面我會給出執行個體多級工廠類的應用。

我是有些基礎類還是使用以前的,只不過為每個產品增加了一個工廠類

1:抽象工廠類:

package factory.more;public abstract class AbstractPlatFactory {public abstract PlatForm createPlat();}

2:具體工廠類:

package factory.more;public class BaiduFactory extends AbstractPlatFactory{@Overridepublic PlatForm createPlat() {// TODO Auto-generated method stubreturn new BaiduProduct();}}

package factory.more;public class Qihu360Factory extends AbstractPlatFactory{@Overridepublic PlatForm createPlat() {return new Qihu360Product();}}

package factory.more;public class SogouFactory extends AbstractPlatFactory{@Overridepublic PlatForm createPlat() {return new SogouProduct();}}

情境類:
package factory.more;public class Client {public static void main(String[] args) { PlatForm plat = new BaiduFactory().createPlat(); plat.search(); plat.music();}}
這是多級工廠類的使用,

實際上還有抽象工廠類的應用,它是指為相關對象提供一組介面,無需指定他們的具體類。(今天太晚了,以後有時間會接著說的)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.