java 工厂的变形模拟的各种应用
生活随笔
收集整理的這篇文章主要介紹了
java 工厂的变形模拟的各种应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?工廠模式是在項目開發中使用效率高,意一個接口,該定義用于創建對象。讓子類來決定哪一個類實例。
這就是一個工廠類的示意圖
接著來一個簡單的樣例:
如上圖所看到的,我們首先定義我們的產品抽象類接口,也能夠是抽象類:
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 {/*** 創建一個用于創建對象的接口,讓子類去確定實例化哪一個對象。工廠方法,讓一個類的實例化延遲到子類*/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(); } }
在這里面模仿了一個client,就能夠輸出你想要的結果。
在工廠模式方法中抽象產品類負責定義產品的共性,實現實物最抽象的定義;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();} } 這是多級工廠類的使用,
實際上還有抽象工廠類的應用,它是指為相關對象提供一組接口,如果沒有指定具體的類。
(今天太晚了,過了一段時間,然后會說)
版權聲明:本文博主原創文章。博客,未經同意不得轉載。
轉載于:https://www.cnblogs.com/yxwkf/p/4793571.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的java 工厂的变形模拟的各种应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET基础 (05)内存管理和垃圾回收
- 下一篇: Visio 快捷大全(转载)