[设计模式]2. Factory Method
来源:互联网 发布:淘宝开店模板 编辑:程序博客网 时间:2024/05/22 13:54
Factory Method
基于此 Template Method 模式, Product 抽象类的 template_method() 会反向呼叫 ConcreteProduct 应用类别的 hook_method() 。
然而,其复杂难解的问题是:必须先创建建 ConcreteProduct 之对象后,才能返向呼叫到 ConcreteProduct子类别的 hook_method() 函数。
但是,在编写框架的抽象类时,还不知有那些应用类别,又如何使用new 指令去创建应用类别之对象呢?(Factory Method)
package cn.pw.java.dp.factorymethod;public class FactoryMethodMain { public static void main(String[] args) { Client ca = new Client(); ca.FactoryMethod(); }}abstract class Product { public void template_method() { System.out.println(hook_method()); } protected abstract String hook_method();}class ConcreteProduct extends Product { private String name; ConcreteProduct(String na) { name = na; } @Override protected String hook_method() { return name; }}class Client { public void FactoryMethod() { Product obj = new ConcreteProduct("JEEP"); obj.template_method(); }}
由于 ConcreteProduct 是子类别,其包含着「会变」的部份,包括其名称:
“ConcreteProduct” 本身都是「会变」的。
因而 Client 类别的 factoryMethod() 函数:Product obj = new ConcreteProduct(“JEEP”);
也是「会变」 ( 即会随着应用类别的名称之改变而变 ) 的部份了。于是,基于「变与不变分离」原则,可以将 Client 类别里的不变与会变部分加以分离开来,并纳入父、子类别里。
变与不变之分离
//针对Client变化部分分离AP,AbsClient抽象到AF,ConcreteClient为APabstract class AbsClient{ Product obj; abstract void FactoryMethod(); // abstract Product FactoryMethod(); void client_template_method() { FactoryMethod(); //... obj.template_method(); // FactoryMethod().template_method(); }}//ConcreteClient1,2,3...class ConcreteClient extends AbsClient { public void FactoryMethod() { // Product FactoryMethod(); obj = new ConcreteProduct("JEEP"); }}public static void main(String[] args) { AbsClient ca = new ConcreteClient(); ca.client_template_method();}
阅读全文
0 0
- [设计模式]2. Factory Method
- Factory Method设计模式
- Factory Method设计模式
- 设计模式 Factory Method
- 设计模式--Factory Method
- 设计模式-Factory method
- 设计模式之Factory Method
- 设计模式之Factory method
- 设计模式之factory method
- 设计模式学习--Factory Method
- 设计模式(三):Factory Method模式
- 设计模式(三):Factory Method模式
- Java设计模式-----Factory Method模式
- 002.设计模式之Factory Method模式
- Java设计模式-----Factory Method模式
- 重学设计模式 - Factory Method模式
- 设计模式-工厂方法模式(factory method)
- 设计模式-工厂方法模式(Factory Method)
- Python Imaging Library: ImageGrab Module(图像采集模块)
- java基础知识--多态
- Combination Sum--LeetCode
- Linux中使用Shell脚本插入mysql数据库中文字段值乱码问题
- 2017第二届全国中医药院校程序设计竞赛——赛后总结
- [设计模式]2. Factory Method
- 15.3.2 OutputStream和Writer
- 图像的绘制 直线 椭圆 圆形 多边形
- 自律之苦
- 菜鸟学数据库(四)——超键、候选键、主键、外键
- 洛谷P1979 华容道(dfs)
- python基础-打开模式、seek、修改文件、with上下文管理、truncate
- Redis keys 命令
- 红黑树(RB-tree)比AVL树的优势在哪?