java 3种工厂模式的快速,简易理解
1.简单工厂模式(Simple Factory)
就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一个类。
//定义水果 接口public interface Fruit {void plantFruit();void eatFruit();}//苹果实现水果接口public class Apple implements Fruit {@Overridepublic void plantFruit() {System.out.println("种苹果。");}@Overridepublic void eatFruit() {System.out.println("吃苹果。");}}//橘子实现水果接口public class Orange implements Fruit {@Overridepublic void plantFruit() {System.out.println("种橘子。");}@Overridepublic void eatFruit() {System.out.println("吃橘子。");}}//水果工厂public class FruitFactory {public static Fruit getFurit(String fruitName) {//简单工厂模式if (fruitName.equalsIgnoreCase("Apple")) { // 如果是苹果,则返回苹果实例return new Apple();} else if (fruitName.equalsIgnoreCase("Orange")) { // 如果是橘子,则返回橘子实例return new Orange();} else {return null;}}}//测试类public class Test {public static void main(String[]args){//调用简单工厂模式FruitFactory.getFurit("Orange").plantFruit();}}输出:种橘子。//定义水果 接口public interface Fruit {void plantFruit();void eatFruit();}//苹果实现水果接口public class Apple implements Fruit {@Overridepublic void plantFruit() {System.out.println("种苹果。");}@Overridepublic void eatFruit() {System.out.println("吃苹果。");}}//橘子实现水果接口public class Orange implements Fruit {@Overridepublic void plantFruit() {System.out.println("种橘子。");}@Overridepublic void eatFruit() {System.out.println("吃橘子。");}}//水果工厂([b]注意:此工厂声明为一个接口,具有了良好的扩展性[/b])public interface FactoryMethod { /** * 工厂方法 */ Fruit getFruit(); //定义获取水果这一过程}//苹果对水果工厂的实现public class getApple implements FactoryMethod{@Overridepublic Fruit getFruit() {// TODO Auto-generated method stubreturn new Apple();}}//橘子对水果工厂的实现public class getOrange implements FactoryMethod {@Overridepublic Fruit getFruit() {// TODO Auto-generated method stubreturn new Orange();}}//测试类public class TestFactoryMethod {public static void main(String[] args) {getApple apple = new getApple();apple.getFruit().eatFruit();}}输出:吃苹果。//定义水果 接口public interface Fruit {void plantFruit();void eatFruit();}//苹果实现水果接口public class Apple implements Fruit {@Overridepublic void plantFruit() {System.out.println("种苹果。");}@Overridepublic void eatFruit() {System.out.println("吃苹果。");}}//橘子实现水果接口public class Orange implements Fruit {@Overridepublic void plantFruit() {System.out.println("种橘子。");}@Overridepublic void eatFruit() {System.out.println("吃橘子。");}}//定义 肉 的接口public interface Meat {void buyMeat();void eatMeat();}//猪肉实现接口public class BigMeat implements Meat {@Overridepublic void buyMeat() {System.out.println("买猪肉。");}@Overridepublic void eatMeat() {System.out.println("吃猪肉。");}}//牛肉实现接口public class CowMeat implements Meat{@Overridepublic void buyMeat() {System.out.println("买牛肉。");}@Overridepublic void eatMeat() {System.out.println("吃牛肉。");}}//定义消费者的接口public interface UserFactory { /** * 水果工厂方法 */ public Fruit getFruit(Fruit whichFruit); /** * 肉的工厂方法 */ public Meat getMeat(Meat whichMeat);}//实现消费者的接口public class User implements UserFactory {@Overridepublic Fruit getFruit(Fruit whichFruit) {return whichFruit;}@Overridepublic Meat getMeat(Meat whichMeat) {return whichMeat;}}//测试类public class TestUserFactory {public static void main(String[]args){Fruit apple=new Apple();Meat bigMeat=new BigMeat();//消费者实例User me=new User();me.getFruit(apple).eatFruit();me.getMeat(bigMeat).buyMeat();}}输出:吃苹果。买猪肉。