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

 

最终实现效果:

 

  代码下载:

工厂方法模式




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


相关文章
|
2月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
318 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
290 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
666 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
3月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
553 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
2月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
180 0
|
存储 Java 开发工具
Android开发的技术与开发流程
Android开发的技术与开发流程
624 1
|
安全 Android开发 Swift
安卓与iOS开发:平台差异与技术选择
【8月更文挑战第26天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各占一方。本文旨在探索这两个系统在开发过程中的不同之处,并分析开发者如何根据项目需求选择合适的技术栈。通过深入浅出的对比,我们将揭示各自平台的优势与挑战,帮助开发者做出更明智的决策。
260 5
|
移动开发 搜索推荐 Android开发
安卓与iOS开发:一场跨平台的技术角逐
在移动开发的广阔舞台上,两大主角——安卓和iOS,持续上演着激烈的技术角逐。本文将深入浅出地探讨这两个平台的开发环境、工具和未来趋势,旨在为开发者揭示跨平台开发的秘密,同时激发读者对技术进步的思考和对未来的期待。
|
移动开发 开发工具 Android开发
探索安卓与iOS开发的差异:技术选择的影响
【8月更文挑战第17天】 在移动应用开发的广阔天地中,安卓和iOS两大平台各领风骚。本文通过比较这两个平台的编程语言、开发工具及市场策略,揭示了技术选择对开发者和产品成功的重要性。我们将从开发者的视角出发,深入探讨不同平台的技术特性及其对项目实施的具体影响,旨在为即将步入移动开发领域的新手提供一个清晰的指南,同时给予资深开发者新的思考角度。
179 3
|
编解码 Android开发 iOS开发
安卓与iOS开发:平台差异下的技术创新之路
在数字时代的浪潮中,移动应用开发如同两股潮流——安卓与iOS,各自携带着独特的技术生态和文化基因。本文将深入探讨这两大平台的开发环境、编程语言和工具的差异,以及它们如何塑造了不同的用户体验和技术趋势。通过比较分析,我们旨在揭示跨平台开发的可能性和挑战,同时探索未来技术创新的方向。让我们一起跟随代码的足迹,穿越安卓的开放草原和iOS的精密园林,发现那些隐藏在平台差异之下的创新机遇。
156 1

热门文章

最新文章