zoukankan      html  css  js  c++  java
  • 设计模式——工厂方法模式

    定义: 

    工厂方法模式是简单工厂模式的延伸。在工厂方法模式中,核心工厂类不在负责产品的创建,而是将具体的创建工作交给子类去完成。也就是后所这个核心工厂仅仅只是提供创建的接口,具体实现方法交给继承它的子类去完成。当我们的系统需要增加其他新的对象时,我们只需要添加一个具体的产品和它的创建工厂即可,不需要对原工厂进行任何修改,这样很好地符合了“开闭原则”。

    示例代码:

    Fruit.java

    package com.designPattern.factoryMethod;
    
    /***
     * 
     * @author liuzhihu
     *
     */
    public interface Fruit {
    
    	/***
    	 * 定义吃水果的方法
    	 */
    	public void eatFruit();
    
    }
    

    Apple.java

    package com.designPattern.factoryMethod;
    
    /***
     * 
     * @author liuzhihu
     *
     */
    public class Apple implements Fruit {
    
    	@Override
    	public void eatFruit() {
    
    		System.out.println("吃苹果  ......");
    
    	}
    
    }
    

    Banana.java

    package com.designPattern.factoryMethod;
    
    /***
     * 
     * @author liuzhihu
     *
     */
    public class Banana implements Fruit {
    
    	@Override
    	public void eatFruit() {
    
    		System.out.println("吃香蕉 ......");
    
    	}
    
    }
    

      

    FruitFactory.java

    package com.designPattern.factoryMethod;
    
    public abstract class FruitFactory {
    
    	/***
    	 * 采集水果
    	 * 
    	 * @param type
    	 * @return
    	 */
    	public abstract Fruit getFruit();
    
    }
    

      

    AppleFactory.java

    package com.designPattern.factoryMethod;
    
    public class AppleFactory extends FruitFactory {
    
    	@Override
    	public Fruit getFruit() {
    
    		System.out.println("采摘苹果");
    
    		return new Apple();
    
    	}
    }
    

      

    BananaFactory.java

    package com.designPattern.factoryMethod;
    
    public class BananaFactory extends FruitFactory {
    
    	@Override
    	public Fruit getFruit() {
    
    		System.out.println("采摘香蕉");
    
    		return new Banana();
    
    	}
    }
    

     

    MainTest.java

    package com.designPattern.factoryMethod;
    
    /***
     * 工厂方法模式
     * 
     * @author liuzhihu
     *
     */
    public class MainTest {
    
    	public static void main(String[] args)
    			throws ClassNotFoundException, InstantiationException, IllegalAccessException {
    
    		AppleFactory appleFactory = new AppleFactory();
    
    		Fruit apple = appleFactory.getFruit();
    
    		apple.eatFruit();
    
    		BananaFactory bananaFactory = new BananaFactory();
    
    		Fruit banana = bananaFactory.getFruit();
    
    		banana.eatFruit();
    
    	}
    
    }
    

      

    以上代码,如果想要再添加一种水果,那么实现一下Fruit.java与FruitFactory.java 即可,不用再重新修改旧的代码!

      

    优点

               1、  在工厂方法中,用户只需要知道所要产品的具体工厂,无须关系具体的创建过程,甚至不需要具体产品类的类名。

               2、  在系统增加新的产品时,我们只需要添加一个具体产品类和对应的实现工厂,无需对原工厂进行任何修改,很好地符合了“开闭原则”。

     缺点

               1、  每次增加一个产品时,都需要增加一个具体类和对象实现工厂,系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

      

     

  • 相关阅读:
    memmove 的实现
    [转]SGI STL 红黑树(Red-Black Tree)源代码分析
    [转]让我看了很有感触
    [转]C++ list 类学习笔记
    [转]码农自白:这样成为谷歌工程师
    [转]Traits 编程技法+模板偏特化+template参数推导+内嵌型别编程技巧
    泛型指针,原生指针和智能指针
    [转]C++基本功和 Design Pattern系列 ctor & dtor
    python+opencv滤波操作
    python+opencv阈值
  • 原文地址:https://www.cnblogs.com/liuzhihu/p/8243561.html
Copyright © 2011-2022 走看看