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

 

最终实现效果:

 

  代码下载:

工厂方法模式

 

  发个求职信息:

  本人因个人原因,会在短期间内离职,想找一份android (java、SecureCRT 、Ubuntu、烧录系统。 一年半经验,可做Framework或者Framework 以上工作,一年半经验都是车载工作,现项目己完成。目前公司行业内前三。但因个人原因可能会离职)或Windows phone 7 (C# 经验一年,Windows Phone 7 完全属于自学状态,但可以在短期内胜任岗位工作),倾向于深圳地区,但不排除外地,希望能找到好公司。邮箱:terryyhl@gmail.com 手机:15012644751

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值