上一篇屌丝有了人民币工厂,当时屌丝突然想去美国兜一圈怎么办。
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
适用性:
1、屌丝决定金额的大小
2、屌丝可以根据在不同的国度选择对应的货币
大家先看个类图
1.AbstractFactory
声明一个创建抽象产品对象的操作接口。
2.ConcreteFactory
实现创建具体产品对象的操作。
3.AbstractProduct
为一类产品对象声明一个接口。
4.ConcreteProduct
定义一个将被相应的具体工厂创建的产品对象。实现abstractProduct接口。
5.Client
仅使用由AbstractFactory和AbstractProduct类声明的接口
具体实现:
package creatingtype.abstractfactory; public interface Money { /** * 打印钞票 */ public void printMoney(); }
package creatingtype.abstractfactory; public interface MoneyFactory { //实例化RMB public Money getRMB(); //实例化USD public Money getUSD(); }
package creatingtype.abstractfactory; public abstract class RMB implements Money { /** * 打印钞票 */ public abstract void printMoney(); }
package creatingtype.abstractfactory; public abstract class USD implements Money { /** * 打印钞票 */ public abstract void printMoney(); }
package creatingtype.abstractfactory; public class HundredFactory implements MoneyFactory { public Money getRMB() { return new RMB100(); } public Money getUSD() { return new USD100(); } }
package creatingtype.abstractfactory; public class RMB100 extends RMB { public void printMoney() { System.out.println("你获得了100的人民币一张"); } }
package creatingtype.abstractfactory; public class USD100 extends RMB { public void printMoney() { System.out.println("你获得了100的美元一张"); } }
package creatingtype.abstractfactory; public class FiftyFactory implements MoneyFactory { public Money getRMB() { return new RMB50(); } public Money getUSD() { return new USD50(); } }
package creatingtype.abstractfactory; public class RMB50 extends USD { public void printMoney() { System.out.println("你获得了50的人民币一张"); } }
package creatingtype.abstractfactory; public class USD50 extends USD { public void printMoney() { System.out.println("你获得了50的美元一张"); } }
package creatingtype.abstractfactory; // 抽象工厂模式 public class MainClass { // 抽象工厂模式是所有形态的工厂模式中最为抽 // 象和最其一般性的。抽象工厂模式可以向客户端 // 提供一个接口,使得客户端在不必指定产品的具 // 体类型的情况下,能够创建多个产品族的产品对 // 象。 public static void main(String[] args) { MoneyFactory ohf = new HundredFactory(); Money rmb100 = ohf.getRMB(); rmb100.printMoney(); Money usd100 = ohf.getUSD(); usd100.printMoney(); MoneyFactory ff = new FiftyFactory(); Money rmb50 = ff.getRMB(); rmb50.printMoney(); Money usd50 = ff.getUSD(); usd50.printMoney(); } }