抽象工廠與工廠模式例子
NativeFactory。Java
package com;
//定義 人有殺日本人 和 殺美國人兩個方法
interface NativePerson{
public void killAmeria();
public void killJapan();
}
//中國人實現了人的介面
class NativeChinese implements NativePerson{
//中國人殺美國人
public void killAmeria() {
System.out.println("Chinese kill Ameria");
}
//中國人殺日本人
public void killJapan() {
System.out.println("Chinese kill Japan");
}
}
//俄國人實現了人的介面
class NativeRussia implements NativePerson{
public void killAmeria()
{
System.out.println("Russia kill Ameria");
}
public void killJapan()
{
System.out.println("Russia kill Japan");
}
}
public class NativeFactory
{
/**
* 假如 我要新增朝鮮人 就不需要動前面的邏輯 只需要假如 i==2
return new CX();就行了 我們不需要通過new 關鍵字去例項化了
在整個就不涉及到Sample的具體子類,達到封裝效果,也就減少錯誤修改的機會,
這個原理可以用很通俗的話來比喻:就是具體事情做得越多,越容易範錯誤.
這每個做過具體工作的人都深有體會,相反,
官做得越高,說出的話越抽象越籠統,範錯誤可能性就越少.
**/
public static NativePerson getPerson(int i)
{
if(i==0)
return new NativeChinese();
else
return new NativeRussia();
}
public static void main(String[] args) {
NativePerson person=NativeFactory.getPerson(0);
person.killAmeria();
person.killJapan();
}
}
UFOFactory.java
package com;
//定義 人有殺日本人 和 殺美國人兩個方法
interface UFOPerson{
public void killAmeria();
public void killJapan();
}
//中國人實現了人的介面
class UFOChinese implements UFOPerson{
//中國人殺美國人
public void killAmeria() {
System.out.println("UFOChinese kill Ameria");
}
//中國人殺日本人
public void killJapan() {
System.out.println("UFOChinese kill Japan");
}
}
//俄國人實現了人的介面
class UFORussia implements UFOPerson{
public void killAmeria()
{
System.out.println("UFORussia kill Ameria");
}
public void killJapan()
{
System.out.println("UFORussia kill Japan");
}
}
public class UFOFactory
{
public static UFOPerson getPerson(int i)
{
if(i==0)
return new UFOChinese();
else
return new UFORussia();
}
public static void main(String[] args) {
UFOPerson person=UFOFactory.getPerson(0);
person.killAmeria();
person.killJapan();
}
}
AbstractFactory.java
/**
* 假如現在有一個nativ工廠 又多了個UFO工廠 現在要同時生產不能中國人和俄國人
* 其實就是多個工廠模式的聯合 就是抽象工廠模式
有幾個工廠要磨合成一個抽象工廠模式其實就很簡單
新增一個抽象類 該抽象類中新增方法 分別用於獲取 每個工廠的介面方法
工廠類中有幾個方法 就產生幾個工廠 繼承抽象工廠 就行了
*/
abstract class CommonFactory {
public abstract NativePerson getNativePerson();
public abstract UFOPerson getUFOPerson();
}
class ChineseFactory extends CommonFactory {
public NativePerson getNativePerson() {
return new NativeChinese();
}
public UFOPerson getUFOPerson() {
return new UFOChinese();
}
}
class RussionFactory extends CommonFactory {
public NativePerson getNativePerson() {
return new NativeRussia();
}
public UFOPerson getUFOPerson() {
return new UFORussia();
}
}
642 924 975
1372