设计模式—工厂方法
2015-12-18 17:53
417 查看
在工厂方法中会涉及下面4中角色:
抽象工厂角色:不论什么在创建对象的工厂类必须实现该接口.
详细工厂角色:该角色实现了抽象工厂接口,含有与应用相关的逻辑,应用程序调用的话就能创建对应的产品对象。
抽象产品角色:该角色定义了产品的共性,实现对产品最抽象的定义。
详细产品角色:该角色实现了抽象产品角色的接口。
用UML图表示他们的关系:
1.抽象工厂:
2.抽象产品:
3.详细工厂:
4.详细产品
測试类:
分析:工厂方法和简单工厂方法相比,工厂方法遵循了开闭原则。
开闭原则:Software entities should be open for extension,but closed for modification.
意思:一个软件实体应当对扩展开放,对改动关闭.
在之前的简单工厂模式里,假设要添加产品的种类,必需要改动工厂。而在工厂方法中假设想要添加产品的种类(扩展)能够写个该产品的工厂让它实现抽象工厂,然后写个详细产品类。并让它实现抽象产品,不用改动源码,这样就遵循了开闭原则了。
抽象工厂角色:不论什么在创建对象的工厂类必须实现该接口.
详细工厂角色:该角色实现了抽象工厂接口,含有与应用相关的逻辑,应用程序调用的话就能创建对应的产品对象。
抽象产品角色:该角色定义了产品的共性,实现对产品最抽象的定义。
详细产品角色:该角色实现了抽象产品角色的接口。
用UML图表示他们的关系:
1.抽象工厂:
package com; public interface FruitFactory { public Fruit getFruit(); }
2.抽象产品:
package com; public interface Fruit { /* * 获得 */ public void get(); }
3.详细工厂:
1.苹果工厂 package com; public class AppleFactory implements FruitFactory { @Override public Fruit getFruit() { // TODO Auto-generated method stub return new Apple(); } } 2.梨工厂 package com; public class PearFactory implements FruitFactory { @Override public Fruit getFruit() { // TODO Auto-generated method stub return new Pear(); } }
4.详细产品
1.苹果 package com; public class Apple implements Fruit{ /* * 採集 */ public void get(){ System.out.println("获得苹果"); } } 2.梨 package com; public class Pear implements Fruit{ /* * 採集 */ public void get(){ System.out.println("採集梨子"); } }
測试类:
package com; public class MainClass { public static void main(String[] args) { FruitFactory fr=new AppleFactory(); //通过AppleFactory获得Apple实例 Fruit apple=fr.getFruit(); apple.get(); //获得PearFacotry FruitFactory fr2=new PearFactory(); Fruit pear=fr2.getFruit(); pear.get(); } }
分析:工厂方法和简单工厂方法相比,工厂方法遵循了开闭原则。
开闭原则:Software entities should be open for extension,but closed for modification.
意思:一个软件实体应当对扩展开放,对改动关闭.
在之前的简单工厂模式里,假设要添加产品的种类,必需要改动工厂。而在工厂方法中假设想要添加产品的种类(扩展)能够写个该产品的工厂让它实现抽象工厂,然后写个详细产品类。并让它实现抽象产品,不用改动源码,这样就遵循了开闭原则了。
相关文章推荐
- Java提高篇(三一)-----Stack
- bash 学习一 变量、参数、判断与循环
- 【.Net码农】List<T>转换为DataTable
- epoll用法【整理】
- 第13周项目5-拓扑排序算法的验证
- 企业网站制作的决定因素
- 学期总结
- using 命名空间指令和cookie保存实体类的一些问题
- QT窗口置顶
- Android JSON解析(JSONObject和JSONArray)
- Java提高篇(三二)-----List总结
- SpannableString 记录
- 小米游戏中心sdk接入unity
- 在linux上安装mysql rpm包
- Eclipse最有用的快捷键
- Maven3(笔记一)
- YII 框架在windows系统下的安装
- 开关电源与线性电源的区别
- 爱情的格言
- Java设计模式 观察者模式(Observer)