住建培訓網(wǎng)站線上宣傳有哪些好的方式方法
一、概述
定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪一個類。FactoryMethod使一個類的實例化延遲到其子類。
二、適用性
1.當一個類不知道它所必須創(chuàng)建的對象的類的時候。
2.當一個類希望由它的子類來指定它所創(chuàng)建的對象的時候。
3.當類將創(chuàng)建對象的職責委托給多個幫助子類中的某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化的時候。
三、參與者
1.Product 定義工廠方法所創(chuàng)建的對象的接口。
2.ConcreteProduct 實現(xiàn)Product接口。
3.Creator 聲明工廠方法,該方法返回一個Product類型的對象。 Creator也可以定義一個工廠方法的缺省實現(xiàn),它返回一個缺省的ConcreteProduct對象。 可以調(diào)用工廠方法以創(chuàng)建一個Product對象。
4.ConcreteCreator 重定義工廠方法以返回一個ConcreteProduct實例。
四、類圖
五、示例
Product
public abstract class Product {public abstract void work();
}public interface Work {void work();
}
TeacherWork
public class TeacherWork extends Product {@Overridepublic void work() {System.out.println("老師審批作業(yè)!");}
}
?StudentWork
public class StudentWork extends Product {@Overridepublic void work() {System.out.println("學生做作業(yè)!");}
}
IWorkFactory
public interface IWorkFactory {/*** 定義獲取Product實例對象的方法* @return*/Product getWork();
}
TeacherWorkFactory
public class TeacherWorkFactory implements IWorkFactory {@Overridepublic Product getWork() {return new TeacherWork();}
}
StudentWorkFactory?
public class StudentWorkFactory implements IWorkFactory {@Overridepublic Product getWork() {return new StudentWork();}
}
Test
@Test
public void test1(){IWorkFactory studentWorkFactory = new StudentWorkFactory();Product student = studentWorkFactory.getWork();student.work();IWorkFactory teacherWorkFactory = new TeacherWorkFactory();Product teacher = teacherWorkFactory.getWork();teacher.work();
}
測試結(jié)果
Connected to the target VM, address: '127.0.0.1:2702', transport: 'socket'
學生做作業(yè)!
老師審批作業(yè)!
Disconnected from the target VM, address: '127.0.0.1:2702', transport: 'socket'
六、實踐
改造簡單工廠模式
增加接口IFxBaseListener?
/*** @author lyonardo* @createTime 2022年11月21日 15:36:12* @Description*/
public interface IFxBaseListener {FxBaseListenerAbstract getBean();
}
實現(xiàn)類
/*** @author lyonardo* @createTime 2022年11月21日 15:46:33* @Description*/
public class FxProductObjListenerFactory implements IFxBaseListener {private final FxProductObjListener fxProductObjListener = SpringUtil.getBean(FxProductObjListener.class);@Overridepublic FxProductObjListener getBean() {return fxProductObjListener;}
}
todo待自測。