工厂模式在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。