工厂方法模式

 简单工厂模式是最广泛被使用的一个模式,伟大的Spring就大量使用了它的思想

 

那么为什么要使用工厂模式呢?

首先,良好的封装性,代码结构清晰,对用户屏蔽了类实体的创建过程

其次,良好的可扩展性,在增加产品类的情况下,只要适当的修改具体工厂类或者扩展一个工厂类,就可以"拥抱变化"。

再次,屏蔽产品类,产品类如何变化,调用者根本不用担心,它只关心产品的接口,只要接口保持不变,系统的上层模块就不用变化,因为产品的实例化工作是工厂去完成的。

 

产品接口

Java代码    收藏代码
  1. package com.gengu.工厂方法;  
  2.   
  3. /** 这是一个产品接口*/  
  4. public interface Product {  
  5.     public void doSomething();  
  6. }  

 产品A

Java代码    收藏代码
  1. package com.gengu.工厂方法;  
  2. /** 
  3.  * 产品A 
  4.  * */  
  5. public class ProductA implements Product{  
  6.   
  7.     private ProductA(){}  
  8.     @Override  
  9.     public void doSomething() {  
  10.         System.out.println("====这是产品A====");  
  11.     }  
  12. }  

产品B

Java代码    收藏代码
  1. package com.gengu.工厂方法;  
  2.   
  3. public class ProductB implements Product{  
  4.     private ProductB(){}  
  5.     @Override  
  6.     public void doSomething() {  
  7.         System.out.println("====这是产品B====");  
  8.     }  
  9. }  

 工厂接口

Java代码    收藏代码
  1. package com.gengu.工厂方法;  
  2.   
  3. /**这里是工厂类*/  
  4. public interface Creater {  
  5.     /** 
  6.      * 这里返回我需要的实体 
  7.      * */  
  8.     public <T extends Product>  T createProduct(Class<T> clazz);  
  9. }  

 工厂类

Java代码    收藏代码
  1. package com.gengu.工厂方法;  
  2.   
  3. public class CreaterFactory implements Creater{  
  4.     @SuppressWarnings("unchecked")  
  5.     @Override  
  6.     public <T extends Product> T createProduct(Class<T> clazz) {  
  7.         Product product = null;  
  8.         try{  
  9.             product = (Product)Class.forName(clazz.getName()).newInstance();  
  10.         }catch(Exception e){  
  11.             e.printStackTrace();  
  12.         }  
  13.         return (T) product;  
  14.     }  
  15. }  

 测试类

Java代码    收藏代码
  1. package com.gengu.工厂方法;  
  2. /** 
  3.  * 测试类 
  4.  * */  
  5. public class Client {  
  6.     public static void main(String[] args) {  
  7.         Creater creater = new CreaterFactory();  
  8.         ProductA productA = creater.createProduct(ProductA.class);  
  9.         productA.doSomething();  
  10.     }  
  11. }  

 以上就是简单工厂方法的一个范例,工厂方法模式的可扩展性比简单工厂的更优秀,因为他使用了不同于简单工厂的类加载来创建实体,这也是Spring种使用的一种创建bean的方法,只是在工厂方法模式中是在代码中指定,而Spring中是使用了文件的方式。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值