簡(jiǎn)單工廠模式
建立一個(gè)工廠類(lèi),對(duì)實(shí)現(xiàn)了同一接口的一些類(lèi)進(jìn)行實(shí)例的創(chuàng)建。工廠類(lèi)根據(jù)傳入?yún)?shù)的不同創(chuàng)建不同的對(duì)象。

簡(jiǎn)單工廠模式
package com.normalFactory;
/**
* ClassName: MobileFactory
* @Description:普通工廠模式:建立一個(gè)工廠類(lèi),對(duì)實(shí)現(xiàn)了同一接口的一些類(lèi)進(jìn)行實(shí)例的創(chuàng)建。
* @date 2015年10月12日
*/
public class MobileFactory {
public Mobile build(String type){
if(type.equals("Samsung")){
return new Samsung();
}else if(type.equals("Huawei")){
return new Huawei();
}
return null;
}
}
package com.normalFactory;
public interface Mobile {
public void runFunc();
}
package com.normalFactory;
public class Huawei implements Mobile {
@Override
public void runFunc() {
System.out.println("Huawei");
}
}
package com.normalFactory;
public class Samsung implements Mobile {
@Override
public void runFunc() {
System.out.println("Samsung");
}
}
package com.normalFactory;
public class Main {
public static void main(String[] args) {
MobileFactory mf = new MobileFactory();
Mobile samsung = mf.build("Samsung");
Mobile huawei = mf.build("Huawei");
samsung.runFunc();
huawei.runFunc();
}
}
工廠方法模式
定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類(lèi)決定實(shí)例化哪一個(gè)類(lèi)。工廠方法使一個(gè)類(lèi)的實(shí)例化延遲到其子類(lèi)。

工廠方法模式
package com.factoryMethod;
/**
* ClassName: MobileFactory
* 簡(jiǎn)單工廠模式有一個(gè)問(wèn)題就是,類(lèi)的創(chuàng)建依賴(lài)工廠類(lèi),也就是說(shuō),如果想要拓展程序,必須對(duì)工廠類(lèi)進(jìn)行修改,這違背了閉包原則。
* 所以,從設(shè)計(jì)角度考慮,有一定的問(wèn)題,如何解決?就用到工廠方法模式,創(chuàng)建工廠接口和多個(gè)工廠類(lèi),這樣一旦需要增加新的功能,
* 直接增加新的工廠類(lèi)就可以了,不需要修改之前的代碼。
* @date 2015年10月12日
*/
public interface MobileFactory {
public Mobile build();
}
package com.factoryMethod;
public class HuaweiFactory implements MobileFactory {
@Override
public Mobile build() {
return new Huawei();
}
}
package com.factoryMethod;
public class SamsungFactory implements MobileFactory {
@Override
public Mobile build() {
return new Samsung();
}
}
package com.factoryMethod;
public interface Mobile {
public void runFunc();
}
package com.factoryMethod;
public class Samsung implements Mobile {
@Override
public void runFunc() {
System.out.println("Samsung");
}
}
package com.factoryMethod;
public class Huawei implements Mobile {
@Override
public void runFunc() {
System.out.println("Huawei");
}
}
package com.factoryMethod;
public class Main {
public static void main(String[] args) {
MobileFactory fac = new SamsungFactory();
Mobile samsung = fac.build();
samsung.runFunc();
}
}
抽象工廠模式
提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴(lài)對(duì)象的接口,而無(wú)需指定他們具體的類(lèi)。

抽象工廠模式
我感覺(jué),抽象工廠模式和工廠方法模式一樣,只是工廠方法是創(chuàng)建一個(gè)對(duì)象,而抽象工廠模式是創(chuàng)建一組對(duì)象而已。(不知道這種理解對(duì)不對(duì))