`
VerRan
  • 浏览: 459514 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

工厂模式学习

阅读更多
  今天在看"基于UML的面向对象建模技术"时候看到了设计模式部分看了工厂模式,在这之前我看过基本将设计模式的书不过觉得讲的不怎么清晰看了这本书候觉得清晰了很多,关键是上面的例子让我觉得很清晰.<o:p></o:p>

1. 创建模式 <o:p></o:p>

  创建模式是提供创建对象和管理对象生命周期的方法.<o:p></o:p>

 1.1工厂模式<o:p></o:p>

  不同的工厂生产不同的产品,而在一般的方法中则是用一个控制类来直接实例化我们所要生产的产品,而工厂模式则是利用建立一个工厂的思想,工厂来创建对象,主要应用在一个类需要其子类进行创建时还有在编码的时候不能预见需要创建哪类的对象实例,开发人员不希望把创建哪个类的对象实例和讲如何创建实例的信息暴露给外来的程序.
类图和一般的都一样.<o:p></o:p>

实例<o:p></o:p>

 电信行业的计费系统中.电信供应商会根据市场情况提供不同的通信产品.比如88元套餐和30元套餐.对于不同的产品往往采用不同的的计费方式,为了使系统具有更好的通用性,便于新通信产品的加入在系统设计的时候可以采用工厂模式进行设计.

抽象工厂
  1. package com.lht.factory;   
  2.   
  3. public interface Creator {   
  4.     //建立工厂用于生产产品,返回的类型就是要声场的产品这样材可以生产出产品阿!   
  5. public Product factory();   
  6. }   
抽象产品
  1. package com.lht.factory;   
  2.   
  3. public interface Product {   
  4.        double price();//产品的单价   
  5.        int limit();//通过通话时间来限制优惠   
  6.        boolean islocal();//判断打的使不是短途,或者使长途   
  7. }   

Tel30工厂
  1. package com.lht.factory;   
  2.   
  3. public class Tel30Creator implements Creator {   
  4.   
  5.     public Product factory() {   
  6.         // TODO Auto-generated method stub   
  7.         return new Tel30();   
  8.     }   
  9.   
  10. }   
Tel30产品
  1. package com.lht.factory;   
  2.   
  3. public class Tel30 implements Product {   
  4.     double price;   
  5.     int limit_time;   
  6.     boolean local;   
  7.     public Tel30(){   
  8.         price=0.15;   
  9.         limit_time=100;   
  10.         local=true;   
  11.     }   
  12.   
  13.     public boolean islocal() {   
  14.         // TODO Auto-generated method stub   
  15.         return local;   
  16.     }   
  17.   
  18.     public int limit() {   
  19.         // TODO Auto-generated method stub   
  20.         return limit_time;   
  21.     }   
  22.   
  23.     public double price() {   
  24.         // TODO Auto-generated method stub   
  25.         return price;   
  26.     }   
  27.   
  28. }   
Tel88工厂
  1. package com.lht.factory;   
  2.   
  3. public class Tel88Creator implements Creator {   
  4.   
  5.     public Product factory() {   
  6.         // TODO Auto-generated method stub   
  7.         return new Tel88();   
  8.     }   
  9.   
  10. }   

Tel88产品
  1. package com.lht.factory;   
  2.   
  3. public class Tel88 implements Product {   
  4.     double price;//电话的每分钟价格   
  5.     int limit_time;//限制时间   
  6.     boolean local;//是不是短途   
  7.     //建立构造方法   
  8.     Tel88(){   
  9.         price=0.4;   
  10.         limit_time=300;   
  11.         local=true;   
  12.     }   
  13.     public boolean islocal() {   
  14.         // TODO Auto-generated method stub   
  15.         return local;   
  16.     }   
  17.   
  18.     public int limit() {   
  19.         // TODO Auto-generated method stub   
  20.         return limit_time;   
  21.     }   
  22.   
  23.     public double price() {   
  24.         // TODO Auto-generated method stub   
  25.         return price;   
  26.     }   
  27.   
  28. }  
显示业务的详细信息
  1. package com.lht.factory;   
  2.   
  3. public class ListInfo {   
  4.       //public ;   
  5.      public static String msg;   
  6.       public  static String  listDetali(Product product){   
  7.           double price=product.price();   
  8.           int limit_time=product.limit();   
  9.           boolean local=product.islocal();   
  10.           String localString;   
  11.           if(local){   
  12.               localString="短途";   
  13.           }   
  14.           else  
  15.           {   
  16.               localString="长途";   
  17.           }   
  18.           msg="  价格是"+price+"角/分  "+"时间限制是"+limit_time+"分  "+"地区限制是"+localString;   
  19.           return msg;   
  20.       }   
  21. }   
客户端程序用于测试
  1. package com.lht.factory;   
  2.   
  3. public class Client {   
  4.     /**  
  5.      * @param args  
  6.      */  
  7.     //如果我们添加新的产品可以在用新的产品实现Product接口   
  8.     //同时建立newTelCreator创建新产品   
  9.     private  static Creator creator1,creator2;   
  10.     private  static Product product1,product2;   
  11.     public static void main(String[] args) {   
  12.         // TODO Auto-generated method stub   
  13. creator1=new Tel88Creator();//建立Tel88建造器   
  14. creator2=new Tel30Creator();//建立Tel30建造器   
  15. creator3=new TeleHolidayCreator();//建立假日建造器   
  16. product1=creator1.factory();//建立88产品   
  17. product2=creator2.factory();//建立30产品   
  18. product3=creator3.factory();//建立新产品假日套餐   
  19. //获得Tel88的基本信息情况   
  20. String Tel88msg=ListInfo.listDetali(product1);   
  21. System.out.println("Tel88套餐的详细信息"+Tel88msg);   
  22. String Tel30msg=ListInfo.listDetali(product2);   
  23. System.out.println("Tel30套餐的详细信息"+Tel30msg);   
  24.     }   
  25.   
  26.        
  27. }   
结果
  1. Tel88套餐的详细信息  价格是0.4角/分  时间限制是300分  地区限制是短途   
  2. Tel30套餐的详细信息  价格是0.15角/分  时间限制是100分  地区限制是短途  
  
  添加新业务
     假日套餐工厂
  1. package com.lht.factory;   
  2.   
  3. public class TeleHolidayCreator implements Creator {   
  4.   
  5.     public Product factory() {   
  6.         // TODO Auto-generated method stub   
  7.         return new TeleHoliday();   
  8.     }   
  9.   
  10. }   
假日套餐产品
  1. package com.lht.factory;   
  2.   
  3. public class TeleHoliday implements Product {   
  4.     double price;   
  5.     int limit_time;   
  6.     boolean local;   
  7.     public TeleHoliday(){   
  8.         price=0.3;   
  9.         limit_time=100;   
  10.         local=false;   
  11.     }   
  12.     public boolean islocal() {   
  13.         // TODO Auto-generated method stub   
  14.         return local;   
  15.     }   
  16.   
  17.     public int limit() {   
  18.         // TODO Auto-generated method stub   
  19.         return limit_time;   
  20.     }   
  21.   
  22.     public double price() {   
  23.         // TODO Auto-generated method stub   
  24.         return price;   
  25.     }   
  26.   
  27. }   

新业务添加成功!
分享到:
评论

相关推荐

    简单工厂模式学习代码

    在描述中提到的文章《简单工厂模式学习代码》来源于CSDN博客,作者hailushijie分享了关于如何理解和应用简单工厂模式的实践案例。文章可能包括以下内容: 1. **模式定义**: 简单工厂模式是一种静态工厂方法模式,...

    设计模式中的工厂模式学习

    在这个"设计模式中的工厂模式学习"主题中,我们将深入探讨工厂模式的概念、应用场景以及其在实际编码中的运用。 工厂模式的核心思想是通过一个专门的工厂类来负责创建对象,而不是让客户端代码直接实例化具体的产品...

    《C++20设计模式》学习笔记-第3章工厂方法和抽象工厂模式学习代码

    《C++20设计模式》学习笔记-第3章工厂方法和抽象工厂模式学习代码

    简单工厂模式学习学习记录

    简单工厂模式的结构组成: 工厂类(ShoesFactory):工厂模式的核心类,会定义一个用于创建指定的具体实例对象的接口。 抽象产品类(Shoes):是具体产品类的继承的父类或实现的接口。 具体产品类(NiKeShoes\AdidasShoes...

    工厂模式学习教程,中软员工内部培训教程

    在中软员工的内部培训教程中,工厂模式的学习涵盖了几个重要的子模式,包括单例模式、简单工厂模式、工厂方法模式和抽象工厂模式。 单例模式是设计模式中的核心概念,其主要特点是保证在系统运行过程中,对于给定类...

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    通过学习和理解这三种工厂模式,开发者可以更好地组织代码,降低模块间的耦合,提高软件的可维护性和可扩展性。在实际开发过程中,根据项目需求和产品结构选择合适的工厂模式,能够有效地提高代码质量。

    工厂模式学习学习 ——记录

    工厂模式 优点:面向接口编程,有非常良好的扩展性,符合开闭原则,将创建的工作转移到工厂类中。 工厂模式每一种单一的工厂类只能完成单一的任务,代码简答。 缺点:当类过多时势必引起类文件臃肿,增加代码开销。

    抽象工厂模式学习资料

    常用的设计模式--抽象工厂模式,从理论到实践

    简单工厂模式-工厂方法模式-抽象工厂模式

    在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...

    qitade_抽象工厂模式学习案例代码_qitade_

    抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指明具体类。抽象工厂模式允许客户使用抽象的接口来创建一组相关的产品,而不需要知道实际产出的具体产品是什么。这样客户就从具体产品中...

    设计模式工厂方法模式PPT学习教案.pptx

    "设计模式工厂方法模式PPT学习教案" 本学习教案旨在讲解设计模式中的工厂方法模式(Factory Method),通过学习本教案,学生将掌握工厂方法模式的定义、结构、实例、分析和应用。 模式动机与定义 在软件设计中,...

    简单工厂模式、工厂模式、抽象工厂模式案例(C++实现)

    这些工厂模式的实现文件("工厂模式")可以作为学习和理解设计模式的实例。通过阅读和分析这些代码,你可以深入理解如何在C++中应用这些模式,以及它们在实际项目中的价值。此外,这些模式不仅限于C++,在Java、...

    设计模式单例模式和工厂模式综合应用

    总的来说,这个项目为学习和理解单例模式和工厂模式在实际开发中的应用提供了一个很好的示例。通过结合这两种模式,可以构建出既保证了对象唯一性,又能灵活应对不同产品创建需求的系统。对于Java开发者来说,深入...

    抽象工厂模式+工厂方法模式+策略模式+类图实现手机加工厂

    在软件设计领域,模式是一种解决常见问题的有效方法。本文将探讨三个重要的设计模式:抽象工厂模式、工厂方法模式以及策略模式,并结合一个实际的场景...通过学习和应用这些设计模式,可以提升软件开发的质量和效率。

    工厂模式源代码

    《工厂模式源代码》 工厂模式是软件设计模式中的一种,属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,当我们创建对象时,...通过学习和实践工厂模式,开发者能够更好地设计和构建复杂的软件系统。

    建造者模式学习以及与工厂模式的区别

    2. 结构差异:工厂模式只有一个工厂类,而建造者模式包含导演类和多个建造者类。 3. 产品组装:工厂模式直接返回完整的产品,而建造者模式将创建过程分解为多个步骤,最后由导演类组合成最终产品。 4. 可扩展性:...

    JAVA 设计模式 工厂模式 代理模式 迭代模式 责任链模式 源码

    以下是关于JAVA设计模式中提及的四种模式——工厂模式、代理模式、迭代器模式以及责任链模式的详细说明。 1. **工厂模式**:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,当创建...

    设计模式学习笔记(一)--简单工厂模式源码

    在这个学习笔记中,我们将深入理解简单工厂模式的概念、工作原理以及如何在实际编程中应用。 简单工厂模式的核心思想是通过一个公共的工厂类来创建不同类型的对象。这个工厂类负责识别客户端请求的对象类型,并返回...

    java工厂模式经典学习书籍(很详细的)

    读者可以从中学习到如何在实际项目中应用工厂模式,提高代码的可扩展性和可维护性。 学习工厂模式,你需要理解以下几个关键概念: 1. **工厂类**:这是创建对象的中心,负责根据需要生产出对应的实例。 2. **产品...

Global site tag (gtag.js) - Google Analytics