java设计模式(四)—工厂模式
2015-12-05 22:44
453 查看
1.概念
定义了一个创建对象的接口,但由子类决定你要实例化的类是哪一个。工厂方法让类把实例化延迟到子类。
2.作用
所有的工厂模式都用来封装对象的创建。工厂方法模式通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。以便得到松耦合,更有弹性的设计。
将一个 orderPizza()方法与工厂方法联合起来,就可以成功一个框架。
工厂方法将生产知识封装进各个创建者,也可以被视为一个框架。
3.设计原则
依赖抽象,而不是具体类。
4.实现方式
4.1 类图
4.2 示例
(1)创建者类
(2) 产品类
(3)测试类
定义了一个创建对象的接口,但由子类决定你要实例化的类是哪一个。工厂方法让类把实例化延迟到子类。
2.作用
所有的工厂模式都用来封装对象的创建。工厂方法模式通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。以便得到松耦合,更有弹性的设计。
将一个 orderPizza()方法与工厂方法联合起来,就可以成功一个框架。
工厂方法将生产知识封装进各个创建者,也可以被视为一个框架。
3.设计原则
依赖抽象,而不是具体类。
4.实现方式
4.1 类图
4.2 示例
(1)创建者类
package create; import product.Pizza; public abstract class PizzaStore { Pizza pizza; public void orderPizza(String type){ pizza = createPizza(type); pizza.bake(); pizza.cut(); pizza.box(); } public abstract Pizza createPizza(String type); } package create; import product.NYStyleCheesePizza; import product.NYStylePepperoniPizza; import product.Pizza; public class NYPizzaStore extends PizzaStore{ @Override public Pizza createPizza(String type) { // TODO Auto-generated method stub if("cheeze".equals(type)){ return new NYStyleCheesePizza(); } if("pepperoni".equals(type)){ return new NYStylePepperoniPizza(); }else{ return null; } } }
(2) 产品类
package product; public abstract class Pizza { public void bake(){ System.out.println("bake"); } public void cut(){ System.out.println("cut"); } public void box(){ System.out.println("box"); } } package product; public class NYStyleCheesePizza extends Pizza { public NYStyleCheesePizza(){ System.out.println("NYStyleCheesePizza"); } } package product; public class NYStylePepperoniPizza extends Pizza { public NYStylePepperoniPizza(){ System.out.println("NYStylePepperoniPizza"); } }
(3)测试类
package test; import create.NYPizzaStore; import create.PizzaStore; public class TestFactoryPattern { public static void main(String[] args) { PizzaStore nyPizzaStore = new NYPizzaStore(); nyPizzaStore.orderPizza("cheeze"); } }
相关文章推荐
- java求组合排列算法
- Java使用SAM解析XML
- spring线程池ThreadPoolExecutor配置并且得到任务执行的结果
- Spring如何处理线程并发
- java学习心得
- 解决问题 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- 容器的同步控制与只读设置JAVA133
- java中的变量(成员变量、本地变量、类变量)
- SpringMVC深度探险(一) —— SpringMVC前传
- 在SpringMVC利用MockMvc进行单元测试
- spring mvc 框架搭建及详解
- Spring的MVC相比Structs2有什么优点
- 异步调用实现java
- 实例详解Spring MVC入门使用
- Java使用DOM解析XML
- Spring MVC集成Tiles框架
- Java缓存机制案例
- Jaro-Winkler Distance JAVA代码实现版
- 我的第九个java程序--spring和mybatis整合(java project)
- Android Studio 常用快捷键及如何沿用Eclipse的快捷键