工廠模式
意義
- 將創(chuàng)建者和調(diào)用者進行分離,創(chuàng)建過程細(xì)節(jié)隱蔽,實現(xiàn)更好的擴展
工廠模式的分類
- 簡單工廠(靜態(tài)工廠)
- 定義一個抽象產(chǎn)品類
- 實現(xiàn)具體的產(chǎn)品類
- 創(chuàng)建工廠實現(xiàn)
被調(diào)用產(chǎn)品實例
的方法 - 外部類通過工廠調(diào)用實例方法、
抽象產(chǎn)品類
public interface ICreatProduct{
void creatProduct();
}
具體產(chǎn)品A
public class A implements ICreatProduct{
@Override
public void creatProduct(){
System.out.println("創(chuàng)建商品 A");
}
}
具體產(chǎn)品B
public class B implements ICreatProduct{
@Override
public void creatProduct(){
System.out.println("創(chuàng)建商品 B")
}
}
工廠類
public class Factory {
public static ICreatProduct getProductA(){
return new A();
}
public static ICreatProduct getProductB(){
return new B();
}
}
調(diào)用
public class User {
public static void main (String[] args){
ICreatProduct a = Factory.getProductA();
a.creatProduct();
ICreatProduct b = Factory.getProductB();
b.creatProduct();
}
}
- 工廠方法
- 定義一個抽象的產(chǎn)品類
- 實現(xiàn)具體的產(chǎn)品類
- 創(chuàng)建多個抽象的工廠類
- 實現(xiàn)具體的工廠類,并提供
被調(diào)用的產(chǎn)品的實例
的方法 - 外部類通過工廠調(diào)用實例方法
抽象產(chǎn)品
public interface ICreatProduct{
void creatProduct();
}
具體產(chǎn)品 A
public class A implements ICreatProduct{
@Override
public void creatProduct(){
System.out.println("創(chuàng)建商品 A");
}
}
具體產(chǎn)品 B
public class B implements ICreatProduct{
@Override
public void creatProduct(){
System.out.println("創(chuàng)建商品 B");
}
}
抽象工廠
public interface ICreatFactory{
ICreatProduct productMethod();
}
具體工廠 A
public class AFactory implements ICreatFactory{
@Override
public ICreatProduct productMethod(){
return new A();
}
}
具體工廠 B
public class BFactory implements ICreatFactory{
@Override
public ICreatProduct productMethod(){
return new B();
}
}
調(diào)用
public class User {
ICreatFactory factroyA = new AFactory();
factoryA.creatProduct();
ICreatFactory factoryB = new BFactory();
factoryB.creatProduct();
}
- 抽象工廠
- 定義多個抽象的產(chǎn)品類
- 實現(xiàn)具體的產(chǎn)品類
- 創(chuàng)建多個抽象的工廠類
- 實現(xiàn)具體的工廠類,并提供
被調(diào)用的產(chǎn)品的實例
的方法 - 外部類通過工廠調(diào)用實例方法
抽象產(chǎn)品類
public interface ICreatProduct{
void creatProduct();
}
具體產(chǎn)品 A
public class A interface ICreatProduct{
@Override
public void creatProduct () {
System.out.println("創(chuàng)建產(chǎn)品 A");
}
}
具體產(chǎn)品 B
public class B interface ICreatProduct{
@Override
public void creatProduct () {
System.out.println("創(chuàng)建產(chǎn)品 B");
}
}
創(chuàng)建另一種抽象產(chǎn)品
public interface ICreatOtherProduct{
void creatOtherProduct();
}
創(chuàng)建具體產(chǎn)品 X
public class X implements ICreatOtherProduct{
@Override
public void creatOtherProduct(){
System.out.println("創(chuàng)建其他產(chǎn)品 X");
}
}
創(chuàng)建具體產(chǎn)品 Y
public class Y implements ICreatOtherProduct{
@Override
public void creatOtherProduct(){
System.out.println("創(chuàng)建其他產(chǎn)品 Y");
}
}
創(chuàng)建抽象工廠
public interface ICreatFactory{
ICreatProduct creatProduct();
ICreatOtherProduct creatProduct();
}
產(chǎn)品組合工廠
public class FactoryAX implements ICreatFactory{
@Override
public ICreatProduct creatProduct(){
return new A ();
}
@Override
public ICreatOtherProduct creatOtherProduct(){
return new X ();
}
}
產(chǎn)品組合工廠
public class FactoryBY implements ICreatFactory{
@Override
public ICreatProduct creatProduct(){
return new B ();
}
@Override
public ICreatOtherProduct creatOtherProduct(){
return new Y ();
}
}
調(diào)用者
public class User {
ICreatFactory factoryAX = new CreatFactoryAX
factoryAX.creatProduct();
factoryAX.creatOtherProduct();
ICreatFactory factoryBY = new CreatFactoryBY
factoryBY.creatProduct();
factoryBY.creatOtherProduct();
}
- 代碼中如有相關(guān)錯誤請指出、純手工敲、未運行過、重要是思路、