钱是屌丝最缺的东西,为大家提供造钱工厂让你们嗨翻天。
意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。
适用性:
1、屌丝用钱的时候才去造钱
2、屌丝决定造出什么毛爷爷
大家先看个类图
1.Product
定义工厂方法所创建的对象的接口。
2.ConcreteProduct
实现Product接口。
3.Creator
声明工厂方法,该方法返回一个Product类型的对象。
4.ConcreteCreator
重定义工厂方法以返回一个ConcreteProduct实例。
具体实现:
package creatingtype.factorymethod; public interface Money { /** * 打印钞票 */ public void printMoney(); }
package creatingtype.factorymethod; public interface MoneyFactory { /** * 获得Money */ public Money getMoney(); }
package creatingtype.factorymethod; public class BlueMoney implements Money { /** * 打印钞票 */ public void printMoney() { System.out.println("你获得了蓝色的50元毛爷爷一张"); } }
package creatingtype.factorymethod; public class BlueMoneyFactory implements MoneyFactory { /** * 获得Money */ public Money getMoney() { return new BlueMoney(); } }
package creatingtype.factorymethod; public class RedMoney implements Money { /** * 打印钞票 */ public void printMoney() { System.out.println("你获得了红色的100元毛爷爷一张"); } }
package creatingtype.factorymethod; public class RedMoneyFactory implements MoneyFactory { /** * 获得Money */ public Money getMoney() { return new RedMoney(); } }
package creatingtype.factorymethod; // 工厂方法模式 public class MainClass { // 工厂方法模式同样属于类的创建型模式又被称 // 为多态工厂模式 。工厂方法模式的意义是定义一个创建 // 产品对象的工厂接口,将实际创建工作推迟到子类当中。 // 核心工厂类不再负责产品的创建,这样核心类成为一个 // 抽象工厂角色,仅负责具体工厂子类必须实现的接口, // 这样进一步抽象化的好处是使得工厂方法模式可以使系 // 统在不修改具体工厂角色的情况下引进新的产品。 public static void main(String[] args) { //获得BlueMoneyFactory MoneyFactory bmf = new BlueMoneyFactory(); //通过BlueMoneyFactory来获得BlueMoney实例对象 Money bm = bmf.getMoney(); bm.printMoney(); //获得RedMoneyFactory MoneyFactory rmf = new RedMoneyFactory(); //通过RedMoneyFactory来获得RedMoney实例对象 Money rm = rmf.getMoney(); rm.printMoney(); } }