Android Ap 开发 设计模式第四篇:工厂方法模式
Factory Method Pattern
模板模式的衍生品?
以Template Method Pattern 架构获取产生对象实例的工厂就是Factory Method Pattern。
工厂方法模式在父类规定对象的创建方法,但并没有深入到较具体的类名。所有具体的完整内容 都放在子类。根据这个原则,我们可以大致分成产生对象实例的大纲(框架)和实际生产对象实例的类两方面。
场景模拟
以一个工厂进厂打工为原型,工人们进厂须先登记信息,由所登记的信息进入创建工卡,工人们每天进厂必须使用工卡打卡,开始一天的劳动。以此为例,进行编程,设计UML图如下:
程序实现
抽象类Product定义抽象方法create ()表示创建用工card 信息和use () 表示用户使用card
抽象类Factory实现方法create 的抽象类,这里就是我们上文所说的为什么是模板方法模式衍生品。和定义抽象方法createProduct()、抽象方法registerProduct() 交由子类负责完成 。
类IDcard 继承自Product 实现方法use 和create
类IDCardFactory 继承 自Factory 实现方法createProduct、registerProduct
Product 抽象类
public abstract String create();
public abstract String use();
}
Factory 抽象类
public final Product create(String owner) {
Product p = createProduct(owner);
registerProduct(p);
return p;
}
protected abstract Product createProduct(String owner);
protected abstract void registerProduct(Product product);
}
IDCard 类
private String owner;
public IDCard(String owner) {
// TODO Auto-generated constructor stub
this.owner=owner;
}
@Override
public String use() {
// TODO Auto-generated method stub
return "使用"+owner+"的卡";
}
public String getOwner(){
return owner;
}
@Override
public String create() {
// TODO Auto-generated method stub
return "建立 "+owner+"的卡";
}
}
IDCardFactory 类
private Vector<String> owners=new Vector<String>();
@Override
protected Product createProduct(String owner) {
// TODO Auto-generated method stub
return new IDCard(owner);
}
@Override
protected void registerProduct(Product product) {
// TODO Auto-generated method stub
owners.add(((IDCard)product).getOwner());
}
public Vector<String> getOwners(){
return owners;
}
}
界面代码实现 FatoryMethodActivity:
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
((Button) findViewById(R.id.Button01)).setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Factory factory = new IDCardFactory();
Product card1 = factory.create("terry");
Product card2 = factory.create("paul");
Product card3 = factory.create("jim");
((EditText) findViewById(R.id.EditText01)).setText(card1.create()+","
+ card1.use() + "\n" + card2.create() +","+ card2.use() + "\n"
+ card3.create() +","+ card3.use());
}
}
最终实现效果:
代码下载:
工厂方法模式
本文转自 terry_龙 51CTO博客,原文链接:http://blog.51cto.com/terryblog/609318,如需转载请自行联系原作者
Android Ap 开发 设计模式第四篇:工厂方法模式相关推荐
- Android Ap 开发 设计模式第六篇:原型模式
Prototype Pattern 名称由来 不是利用类来产生实例对象,而是从一个对象实例产生出另一个新的对象实例 ,根据被视为原型的对象实例 ,建立起的另一个新的对象实例就称为原型模式(Ptotot ...
- Android Ap 开发 设计模式第七篇:生成器模式
Builder Pattern 模式解读 生活在深圳这所高速发展的城市,高楼大厦林立.所谓万丈高楼平地起,在我们感慨楼层的高耸之外,更要配服楼层的建造者和设计者.大楼首先得打稳地基.搭建骨架,再由下往 ...
- android 工厂方法模式应用场景,Android设计模式(四)- 工厂方法模式
目录 定义 使用场景 UML 模式1 模式2 模式3 简单工厂模式静态工厂模式 简单实现 Android源码中的工厂方法 总结 优点 缺点 工厂方法模式也是创建型模式. 工厂模式根据抽象程度可以分为三 ...
- 北风设计模式课程---2、工厂方法模式
北风设计模式课程---2.工厂方法模式 一.总结 一句话总结: 工厂方法模式相对于简单工厂模式只是修改了 [工厂核心类-将它变成接口],具体的创建产品的工作交给[工厂核心类的子类] 满足了开闭原则:不 ...
- 设计模式系列之「工厂方法模式」
"玛尼玛尼哄~~~",一个手持螺旋丸的鸣人出现了. "哦哈哟锅炸一马屎~~~",一个仙人模式的鸣人出现了. "死密码撒~~~",使用变身术的 ...
- 对设计模式的总结之工厂方法模式和抽象工厂模式
前言 面向对象编程追求的本质-提高扩展性.可维护性.灵活性和复用性.合理利用面向对象6个原则,能够很好的达到要求.如何利用好就是至关重要的了,前人总结了23+个设计模式能够让初学者更容易学到其中的精髓 ...
- 跟着学设计模式 (1)— 工厂方法模式
跟着学设计模式 (1)- 工厂方法模式 前提 工厂方法模式介绍 实现模拟发奖多种商品为例 代码实现 工厂模式优化代码 前提 好看的代码千篇一律,恶心的程序升职加薪. 谁发明了设计模式? 设计模式的概念 ...
- 第二部分:二十三种设计模式解读——什么是工厂方法模式
二十三种设计模式解读--什么是工厂方法模式 author:陈镇坤27 日期:2022年2月10日 修改日期:2022年6月23日 文章目录 二十三种设计模式解读--什么是工厂方法模式 一.工厂方法模式 ...
- Java设计模式【之】工厂方法模式【场景:制作咖啡】
Java设计模式[之]工厂方法模式[场景:制作咖啡] 1.工厂方法 1.1.工厂方法模式 1.2.具体需求(生产多种咖啡) 2.代码实现 2.1.代码结构 2.2.咖啡抽象类 2.3.一种咖啡 2.4 ...
最新文章
- 云计算之路-阿里云上:2013年4月7日14:15~18:35服务器故障经过
- 夺命雷公狗---微信开发26----客服消息接口基础和推送视频
- 字符串池化,减少了三分之一的内存占用
- java heroku_Neo4j Java Rest绑定入门(Heroku部署)
- 排查一个触摸屏驱动问题
- 数据库基本常用类型解析
- 关于移植jSON编译时报错sbrkr.c:(.text+0xc): undefined reference to `_sbrk'处理
- asp.net页面的验证码代码
- mc2180 刷机方法_MC控制和时差方法
- 性能测试之LoadRunner11脚本录制方法
- 书城项目 软件可行性分析报告
- 微型计算机显示器接口,微型计算机接口技术8-2LED显示器接口-Read.PPT
- PAT_乙级_1001_筱筱
- java读取qq邮箱邮件
- pygame-KidsCanCode系列jumpy-part1-如何组织复杂游戏的代码
- 采用SAMKeychain钥匙串存储设备唯一标示与何种情况下同一个手机它存储的值会变化
- Python实现抓取微信公众号文章
- SpringSecurity安全框架简介
- r语言nonzerocoef函数_lars算法的R语言操作指南
- 一图说明什么是 java 中 pojo类
热门文章
- linux中变量的使用
- 51CTO网站博客改版意见寻求
- 如何在 Windows XP Service Pack 2 上启用 SQL Server 连接
- Nginx+Tomcat搭建高性能负载均衡集群的实现方法
- Vue2.0史上最全入坑教程(中)—— 脚手架代码详解
- MySQL(用户管理,常用sql语句,数据库备份恢复,MySQL调优,恢复误操作数据)...
- Android之收音机UI实现(转)
- SCCM 2007系列教程之四在工作组环境内实现SCCM客户端
- 强者联盟——Python语言结合Spark框架
- Weblogic魔法堂:AdminServer.lok被锁导致启动、关闭域失败