设计模式之创建模式之工厂模式
一、简单工厂模式(Simple Factory)
1,UML图
工厂类(creator)角色:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体Java类实现。
抽象产品(Product)角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个Java接口或者Java抽象类实现。
具体产品(Concrete Product)角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体Java类实现。
2, 模式说明
简单工厂模式也称静态工厂模式,是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例,是不同的工厂方法模式的一个特殊实现。
3,模式示例代码
package com.maohao.build.factory.simple; public interface Fruit {public void grow(); }
package com.maohao.build.factory.simple; public class Apple implements Fruit {public Apple() {grow();}@Overridepublic void grow() { System.out.println("an apple grows");} }
package com.maohao.build.factory.simple; public class Orange implements Fruit {public Orange() {grow();}@Overridepublic void grow() {System.out.println("an orange grows");} }
package com.maohao.build.factory.simple; public class SimpleFactory { public static Fruit growFruit(String choose) {if(choose.equalsIgnoreCase("apple")) {return new Apple();} else if(choose.equalsIgnoreCase("orange")) {return new Orange();} else {return null;} } public static void main(String[] args) {SimpleFactory.growFruit("apple");SimpleFactory.growFruit("orange"); } }
package com.maohao.build.factory.method; import com.maohao.build.factory.simple.Fruit; public interface FruitGardener {public Fruit factory(); }
package com.maohao.build.factory.method; import com.maohao.build.factory.simple.Apple; import com.maohao.build.factory.simple.Fruit; public class AppleGardener implements FruitGardener { @Overridepublic Fruit factory() {return new Apple();} }
package com.maohao.build.factory.method; import com.maohao.build.factory.simple.Fruit; import com.maohao.build.factory.simple.Orange; public class OrangeGardener implements FruitGardener {@Overridepublic Fruit factory() {return new Orange();} }
package com.maohao.build.factory.method; public class MethodFactory {public static void main(String[] args) {FruitGardener fg = new AppleGardener();FruitGardener fg2 = new OrangeGardener();fg.factory();fg2.factory();} }
package com.maohao.build.factory.abstractFactory; public interface Apple { public void grow(); }
package com.maohao.build.factory.abstractFactory; public interface Gardener { public Apple createApple(); public Orange createOrange(); }
package com.maohao.build.factory.abstractFactory; public interface Orange { public void grow(); }
package com.maohao.build.factory.abstractFactory; public class RedApple implements Apple { @Override public void grow() {System.out.println("a red apple grows!"); } }
package com.maohao.build.factory.abstractFactory; public class RedGardener implements Gardener { @Override public Apple createApple() {return new RedApple(); } @Override public Orange createOrange() {return new RedOrange(); } }
package com.maohao.build.factory.abstractFactory; public class RedOrange implements Orange { @Override public void grow() {System.out.println("a red orange grow!"); } }
package com.maohao.build.factory.abstractFactory; public class YellowApple implements Apple { @Override public void grow() {System.out.println("a yellow apple grows!"); } }
package com.maohao.build.factory.abstractFactory; public class YellowGardener implements Gardener { @Override public Apple createApple() { return new YellowApple(); } @Override public Orange createOrange() {return new YellowOrange(); } }
package com.maohao.build.factory.abstractFactory; public class YellowOrange implements Orange { @Override public void grow() {System.out.println("a yelloOrange grows!"); } }