Factory Method模式

來源:互聯網
上載者:User

標籤:rri   理解   err   str   抽象   new   流程   加工   使用   

第四章: 原廠模式

  原廠模式所包含的角色:

    1.Product(產品)

    2.Creator(建立者)

    3.ConcreateProduct(具體的產品)

    4.ConcreateCreator(具體的建立者)

 

  實現流程: 定義抽象產品(Product),在抽象產品(Product)中可以定義需要實現的抽象方法,原廠模式在使用中一般都是以多態形式使用,如:

Factory f = new XXXFactory("XXX");f.xxx();

 

 

   其中f.xxx();就是你在產品(Product)類中定義的方法,可以理解為你的產品造出來後,怎麼去使用,那麼就在這裡定義。

  接著還需要抽象工廠,這裡用到了模板模式(Template),在抽象工廠類中都會有Create();這個方法,在這個方法中可以放入需要的參數,可以理解為在加工產品是需要用到的‘原料’!

 如果用到原廠模式,那麼在一般情況下都是有較為複雜邏輯,在Create()這個方法中就可以去進行產品的建立以及‘加工‘。

 具體產品類是必須的,繼承抽象產品(Product),其中關係就比如聯想Thinkpad繼承電腦這樣,電腦有開機方法,那麼Thinkpad去繼承它。

 具體工廠,抽象工廠只定義抽象方法,是具體工廠的父類,在具體工廠中再去進行new對象,完成在抽象工廠中定義的一系列流程。

 

 Code: 

  抽象工廠:

 

package example.factory.method;/** * 用於產生Product類,並對Product進行"加工" * @author Administrator * */public abstract class Factory {public final Product create(String owner) {Product p = createProduct(owner);registerProduct(p);return p;}protected abstract void registerProduct(Product p);protected abstract Product createProduct(String owner);}

 

   

  抽象產品:

package example.factory.method;/*** * 只定義抽閑方法的抽象類別,use * @author Administrator * */public abstract class Product {public abstract void use ();}

 

 

  具體產品:

 

package example.factory.method;/** * 產品,繼承Product類的use使用功能。 * @author Administrator * */public class IDCard extends Product{private String owner;@Overridepublic void use() {System.out.println("使用了" + owner + "的ID卡");}IDCard(String owner){System.out.println("製作" + owner + "的ID卡");this.owner = owner;}public String getOwner() {return owner;}}

 

 
 具體工廠:

 

package example.factory.method;import java.util.ArrayList;import java.util.List;public class IdCardFactory extends Factory{private List<String> owners = new ArrayList<>();@Overrideprotected void registerProduct(Product p) {owners.add(((IDCard)p).getOwner());}@Overrideprotected Product createProduct(String owner) {return new IDCard(owner);}}

 

 

 

 

 

package example.factory.method;public class Main {public static void main(String[] args) {Factory factory = new IdCardFactory();Product card1 = factory.create("測試");card1.use();}}

 

Factory Method模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.