Android App 开发 设计模式第四篇:工厂方法模式
来源:互联网 发布:软件性能测试报告案例 编辑:程序博客网 时间:2024/05/29 18:34
Factory Method Pattern
模板模式的衍生品?
以Template Method Pattern 架构获取产生对象实例的工厂就是Factory Method Pattern。
工厂方法模式在父类规定对象的创建方法,但并没有深入到较具体的类名。所有具体的
完整内容 都放在子类。根据这个原则,我们可以大致分成产生对象实例的大纲(框
架)和实际生产对象实例的类两方面。
场景模拟
卡,工人们每天进厂必须使用工卡打卡,开始一天的劳动。以此为例,进行编程,设计
UML图如下:
程序实现
抽象类Factory实现方法create 的抽象类,这里就是我们上文所说的为什么是模板方法模式衍生品。和定义抽象方法createProduct()、抽象方法registerProduct() 交由子类负责完成 。
类IDcard 继承自Product 实现方法use 和create
类IDCardFactory 继承 自Factory 实现方法createProduct、registerProduct
Product 抽象类
public abstract class Product { public abstract String create(); public abstract String use();}
Factory 抽象类
public abstract class 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 类
public class IDCard extends Product{ 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 类
public class IDCardFactory extends Factory{ private Vector owners=new Vector(); @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 getOwners(){ return owners; } }
界面代码实现 FatoryMethodActivity:
public class FatoryMethodActivity extends Activity implements OnClickListener { /** 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()); }}
最终实现效果:
- Android App 开发 设计模式第四篇:工厂方法模式
- Android Ap 开发 设计模式第四篇:工厂方法模式
- Android Ap 开发 设计模式第四篇:工厂方法模式
- Android App 开发 设计模式第八篇:抽象工厂模式
- Android App 开发 设计模式第三篇:模板方法模式
- Android设计模式---工厂方法模式和抽象工厂模式
- Android设计模式系列--工厂方法模式
- android设计模式之工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android中的设计模式-工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- Android设计模式系列--工厂方法模式
- CXF+Spring+Websphere7.0
- SVN权限分配
- X264的时耗分析
- C#正则表达式
- Apache ActiveMQ学习笔记【mq的方式有两种:点到点和发布/订阅】
- Android App 开发 设计模式第四篇:工厂方法模式
- 周鸿祎奋斗记
- 银行核心系统软件开发
- CentOS使用minimal安装后,无法使用SCP
- 从30岁到35岁:为你的生命多积累一些厚度
- C++ 内联函数实现方式
- android,做一个定制化的TextView,在TextView中画图
- 腾讯 vs 百度:两家互联网巨头对比
- 用移位法计算平方