博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Ap 开发 设计模式第四篇:工厂方法模式
阅读量:5973 次
发布时间:2019-06-19

本文共 2679 字,大约阅读时间需要 8 分钟。

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
 
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
<
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:

 

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());
    }
}

 

最终实现效果:

 

  代码下载:

 本文转自 terry_龙 51CTO博客,原文链接:http://blog.51cto.com/terryblog/609318,如需转载请自行联系原作者

你可能感兴趣的文章
#考研笔记#计算机问答题
查看>>
深入学习golang(4)—new与make
查看>>
JS动态生成<style>
查看>>
怎么看自己服务器的带宽?
查看>>
光纤模块接口全是down状态
查看>>
Linux下Python设置vim和交互模式下自动补全
查看>>
阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房)
查看>>
测试mysql绑定变量功能
查看>>
常见路由命令
查看>>
go的错误处理
查看>>
apache2.4.4的安装过程
查看>>
php5.3安装oracle的扩展oci8与pdo_oci
查看>>
Java多线程
查看>>
发送超长短信的协议格式
查看>>
A query was run and no Result Maps were found for the Mapped Statement
查看>>
摆正测试员在软件项目中的位置
查看>>
Bambook 稍后阅读 V1.01 发布
查看>>
安装第三方库出现 Python version 2.7 required, which was not found in the registry
查看>>
【Quartz】Integration with Spring
查看>>
f5课堂:云计算和虚拟化助力灾难恢复
查看>>