工厂方法模式

来源:互联网 发布:淘宝登陆异常如何解除 编辑:程序博客网 时间:2024/04/29 22:08
工厂方法模式(Factory Method Pattern)
1.定义:定义一个创建产品对象的工厂接口,让子类决定实例化哪一种实例对象,即将实际创建实例对象的工作推迟到子类当中,核心工厂类不再负责具体产品的创建。
2.所遵循的设计原则:
a."开-闭"原则
b.依赖倒置原则
3.代码实现:
a.结构截图:

b.代码具体实现

FruitFactory:
package com.feng.pattern.factory_method_pattern.factory;import com.feng.pattern.factory_method_pattern.product.AbstractFruit;public interface FruitFactory {  //水果工厂生产水果  AbstractFruit produceFurit();}
AppleFactory:
package com.feng.pattern.factory_method_pattern.factory;import com.feng.pattern.factory_method_pattern.product.AbstractFruit;import com.feng.pattern.factory_method_pattern.product.Apple;public class AppleFactory implements FruitFactory {public AbstractFruit produceFurit() {return new Apple();}}
PearFactory:
package com.feng.pattern.factory_method_pattern.factory;import com.feng.pattern.factory_method_pattern.product.AbstractFruit;import com.feng.pattern.factory_method_pattern.product.Pear;public class PearFactory implements FruitFactory {public AbstractFruit produceFurit() {return new Pear();}}
AbstractFruit:
package com.feng.pattern.factory_method_pattern.product;public abstract class AbstractFruit {//定义水果的名称private String name;public AbstractFruit(){}public AbstractFruit(String name) {this.name = name;}//获取水果的名称public String getName() {return name;}//设定水果的名称public void setName(String name) {this.name = name;}}
Apple:
package com.feng.pattern.factory_method_pattern.product;public class Apple extends AbstractFruit {public Apple() {super("Apple");}}
Pear:
package com.feng.pattern.factory_method_pattern.product;public class Pear extends AbstractFruit {public Pear() {super("Pear");}}
测试类FactoryMethodTest:
package junit.test;import org.junit.BeforeClass;import org.junit.Test;import com.feng.pattern.factory_method_pattern.factory.AppleFactory;import com.feng.pattern.factory_method_pattern.factory.FruitFactory;import com.feng.pattern.factory_method_pattern.factory.PearFactory;import com.feng.pattern.factory_method_pattern.product.AbstractFruit;public class FactoryMethodTest {@BeforeClasspublic static void setUpBeforeClass() throws Exception {}@Testpublic void produceApple(){FruitFactory factory = new AppleFactory();AbstractFruit fruit  = factory.produceFurit();System.out.println("工厂生产了"+fruit.getName());}@Testpublic void producePear(){FruitFactory factory = new PearFactory();AbstractFruit fruit  = factory.produceFurit();System.out.println("工厂生产了"+fruit.getName());}}





原创粉丝点击