新聞中心
NEWS
當前位置: 首頁(yè) > 產(chǎn)品中心
java工廠(chǎng)模式三種詳解
時(shí)間:2026-05-05 03:08:19工廠(chǎng)模式是工廠(chǎng)一種創(chuàng )建型設計模式,它提供了一種在不指定具體類(lèi)的模式情況下創(chuàng )建對象的方式,在Java中,種詳工廠(chǎng)模式主要有兩種實(shí)現方式:簡(jiǎn)單工廠(chǎng)(′ω`*)模式(╬ ò﹏ó)和工廠(chǎng)方法ヽ(′ー`)ノ模式,工??廠(chǎng)下面將詳細介紹這兩種工廠(chǎng)模式的模式使用方??法。
1、種詳簡(jiǎn)單工廠(chǎng)模式
簡(jiǎn)單工廠(chǎng)模式又稱(chēng)??為靜態(tài)工廠(chǎng)模式,工廠(chǎng)它是ヾ(′▽?zhuān)??模式一種創(chuàng )建型設計模式,提供了一種在不指定具體類(lèi)的種詳情況下創(chuàng )建對象的方式,在Java(╯‵□′)╯中,工廠(chǎng)簡(jiǎn)單工(gong)廠(chǎng)??模式主要有兩種實(shí)(′?_?`)現方式:靜態(tài)方法和實(shí)例方法。模式
(1)靜態(tài)方法
靜態(tài)方法是??種詳在類(lèi)級別上定義的方法,可以直接通過(guò)類(lèi)名調用,工廠(chǎng)在簡(jiǎn)單工廠(chǎng)模式中,模式我們可以使用靜態(tài)方法來(lái)創(chuàng )建對象,種詳下面是一個(gè)簡(jiǎn)單的例子:
public class SimpleFacto(??-)?ry { public st??atic Prod??uct createProduct(String type) { if (&quo(′▽?zhuān)?)t;A".equals(type)) { return new ConcreteProductA(); } else if ("B".e(???)quals(type)) { return new ConcreteProductB(); } else { throw new IllegalArgumentE??xception("Invalid produ?ct type"); } }}在這個(gè)例子中,我們定義了一個(gè)SimpleFactory類(lèi),它有一個(gè)靜態(tài)方法createProduct,該方法接受一個(gè)字符串參數type,根據type的值創(chuàng )建并返回相應的產(chǎn)品對象,如果傳入的type值無(wú)效,則??拋出異常。
(2)實(shí)例方法
public class Simpl(′ω`)eFactory { public Product createProduct(String type) { if ("A".equals(type)) { return new ConcreteProductA(); } else if ("B".equals(type(???))) { return new ConcreteProductB(); } else { throw new IllegalArgumentException("Invalid product type"); } }}在這個(gè)例子中,我們定義了(le)一個(gè)Simp??leFactory類(lèi),它有一個(gè)實(shí)例方法createProduct,該方法接受一個(gè)字符串參數type,根據type的值創(chuàng )建并返回相??應的產(chǎn)品對象,如果傳入的type值無(wú)效,則拋??出異常。
2、工廠(chǎng)方法模式
工廠(chǎng)方法模式是一種創(chuàng )建型設計模式,它提供了一種在不指定具體類(lèi)的情況下創(chuàng )建對象的方式,在Java中,工廠(chǎng)方法模式主要有兩種實(shí)現方式:接口和抽象類(lèi)。
(1)接口
接口是一種特殊的抽象類(lèi)型,它只包含抽象方法和常量,在工廠(chǎng)方法模式中,我們可(ke)以使用接口來(lái)定義產(chǎn)品的創(chuàng )建方法,下面是一個(gè)簡(jiǎn)單的例子:
public interface Product { void doSomething()(???);}在這個(gè)例子中,我們定義了一個(gè)Product接口,它有一個(gè)抽象??方法doSomething,接下(xia)來(lái),我們可以為不同的產(chǎn)品實(shí)現這個(gè)接口:
public class ConcreteProductA implements Product { @Override public vo(′▽?zhuān)?id doSomething((╯°□°)╯︵ ┻━┻) { System.out.println("ConcreteProd???uctA is doing something"); }}public class ConcreteProductB implements Product { @Ov??erride publiヽ(′▽?zhuān)?ノc void doSomething() { System.(′;ω;`)out.println("ConcreteProductB is doing something"); }}public class Factory { public static Product createProduct(String type) { if ("A".equals(type)) { retu??rn new ConcreteProductA(); } else if ("B"ヾ(^-^)ノ;.equals??(ty??pe)) { return new ConcreteProductB(); } else { throw new Il(′▽?zhuān)?legalA??rgumentException("Invalid product type"); } }}在這個(gè)例子中,我們定義了一個(gè)Factory類(lèi),它有一個(gè)靜態(tài)方法createProduct,該方法接受一個(gè)字符串參數type,根據type的值創(chuàng )建并返回相應的產(chǎn)品對象,如果傳入的t??ype值無(wú)(wu)效,則拋出異常。
(2)抽象類(lèi)
抽象類(lèi)是一種特殊的類(lèi),它不能被實(shí)例化,只能被繼承,在工廠(chǎng)方法模式中,我們可以使用抽象類(lèi)來(lái)定義產(chǎn)品的創(chuàng )建方法,下面是一個(gè)簡(jiǎn)單的例子:
public abstract class AbstractProduct { abstrac(′▽?zhuān)?t void doSomething();}在這個(gè)例子中,我們定義了一個(gè)抽象類(lèi)Ab(′ω`)stractProduct,它有一個(gè)抽象方法doSomething,接下來(lái),我們可以為不同的產(chǎn)品繼承這個(gè)抽象類(lèi):
public class ConcreteProductA extends AbstractProduct { @Override public void doSo??mething() { System.out.println("ConcreteProductA is doin??g something"); }}public class ConcreteProductB extends AbstractProduct { @Override public void doSomething() { System.out.println("ConcreteProductB is doing something"); }}
客服電話(huà)19913167781
Copyright ? 2012-2018 天津九安特機電工程有限公司 版權所有 備案號:
客服電話(huà)18158351738