java 設計模式中的三種工廠模式

卡牌大師

工廠模式在Java中分爲三類:
        1)簡單工廠模式(Simple Factory)java

        2)工廠方法模式(Factory Method)測試

        3)抽象工廠模式(Abstract Factory)code

1)簡單工廠模式(Simple Factory)繼承

全部類交給工廠來建立。接口

1.抽象產品角色get

public abstract class Poker {
	//抽象方法
	public abstract void SealCard();
	
}

2.工廠類角色產品

public class SpadeJ extends Poker{
	//實現抽象方法
	public void SealCard() {
		System.out.println("製做一張黑桃J");
	}
}

3.工廠類角色io

public class SimpleFactory {
	public static Object getInstance(String className){
		Object instance = null;
		try {
		    //根據類名獲取該類
			Class cls = Class.forName(className);
			//獲取該類實例
			instance = cls.newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return instance;
	}
}

測試:class

public class TestSF {
	public static void main(String[] args) {
		Poker p = (Poker)StaticFactory.getInstance(SpadeJ.class.getName());
		p.SealCard();
	}
}

執行結果:List

製做一張黑桃J

2)工廠方法模式(Factory Method)

工廠方法模式使用繼承自抽象工廠角色的多個子類來代替簡單工廠模式中的「上帝類」,製做A到K的方法交給紅桃,黑桃,方塊,梅花類完成。

1.抽象方法:

public interface Poker {
	//接口方法,製做A到K
	public void SealA();
	public void Seal2();
	public void Seal3();
	public void Seal4();
	public void Seal5();
	public void Seal6();
	public void Seal7();
	public void Seal8();
	public void Seal9();
	public void Seal10();
	public void SealJ();
	public void SealQ();
	public void SealK();
}

2.分類後具體角色:

public class Club implements Poker{
	public void SealA() {
		System.out.println("製做一張方塊A");
	}
	public void Seal2() {
		System.out.println("製做一張方塊2");
	}
	public void Seal3() {
		System.out.println("製做一張方塊3");
	}
	public void Seal4() {
		System.out.println("製做一張方塊4");
	}
	public void Seal5() {
		System.out.println("製做一張方塊5");
	}
	public void Seal6() {
		System.out.println("製做一張方塊6");
	}
	public void Seal7() {
		System.out.println("製做一張方塊7");
	}
	public void Seal8() {
		System.out.println("製做一張方塊8");
	}
	public void Seal9() {
		System.out.println("製做一張方塊9");
	}
	public void Seal10() {
		System.out.println("製做一張方塊10");
	}
	public void SealJ() {
		System.out.println("製做一張方塊J");
	}
	public void SealQ() {
		System.out.println("製做一張方塊Q");
	}
	public void SealK() {
		System.out.println("製做一張方塊K");
	}
}

 

測試:

public class TestFM {
	public static void main(String[] args) {
		Poker p = new Club();
		p.SealA();
	}
}

執行結果:製做一張方塊A

3)抽象工廠模式(Abstract Factory)

不單純製做撲克,同時增長製做麻將。在抽象工廠模式中,抽象產品 (AbstractProduct) 多是一個或多個,從而構成一個或多個產品族(Product Family)。 在只有一個產品族的狀況下,抽象工廠模式實際上退化到工廠方法模式。

1.抽象工廠:(選擇製做撲克仍是麻將)

public interface BoardGames {

	public Poker createPoker(String pokerColors);
	
	public Mahjong createMahjong(String mahjongColors);
	
}

2.具體工廠:

public class GetGameList implements BoardGames{

	public Poker createPoker(String pokerColors) {
		Poker p = null;
		if(pokerColors.equals("Club")){
			p = new Club();
		}else if(pokerColors.equals("Spade")){
			p = new Spade();
		}else if(pokerColors.equals("Heart")){
			p = new Heart();
		}else if(pokerColors.equals("Diamond")){
			p = new Diamond();
		}
		return p;
	}

	public Mahjong createMahjong(String mahjongColors) {
		return new Mahjong();
	}
 
}

3.抽象方法:(如同工廠方法模式)

public  interface Poker {
	//接口方法,卡上塗A到K
	public void SealA();
	public void Seal2();
	public void Seal3();
	public void Seal4();
	public void Seal5();
	public void Seal6();
	public void Seal7();
	public void Seal8();
	public void Seal9();
	public void Seal10();
	public void SealJ();
	public void SealQ();
	public void SealK();
}

4.具體實現:(如同工廠方法模式)

public class Club implements Poker{
	public void SealA() {
		System.out.println("製做一張方塊A");
	}
	public void Seal2() {
		System.out.println("製做一張方塊2");
	}
	public void Seal3() {
		System.out.println("製做一張方塊3");
	}
	public void Seal4() {
		System.out.println("製做一張方塊4");
	}
	public void Seal5() {
		System.out.println("製做一張方塊5");
	}
	public void Seal6() {
		System.out.println("製做一張方塊6");
	}
	public void Seal7() {
		System.out.println("製做一張方塊7");
	}
	public void Seal8() {
		System.out.println("製做一張方塊8");
	}
	public void Seal9() {
		System.out.println("製做一張方塊9");
	}
	public void Seal10() {
		System.out.println("製做一張方塊10");
	}
	public void SealJ() {
		System.out.println("製做一張方塊J");
	}
	public void SealQ() {
		System.out.println("製做一張方塊Q");
	}
	public void SealK() {
		System.out.println("製做一張方塊K");
	}
}

測試:

public class TestAF {
	public static void main(String[] args) {
		BoardGames bg = new GetGameList();
		bg.createPoker("Club").SealA();
	}
}

執行結果:製做一張方塊A。

相關文章
相關標籤/搜索