码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式(8)-----工厂方法模式

时间:2016-06-20 18:29:30      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:

工厂方法模式(Factory Method)

定义

  定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类延迟到其子类。

UML类图

技术分享

组成       

   1)抽象工厂角色(Creator): 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。

       2)具体工厂角色(ConcreteCreator):它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。

       3)抽象产品角色(Product):它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。

       4)具体产品角色(ConcreteProduct):具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

例子

  一个BMW制造工厂,可以制造各种型号的BMW。

package com.csdhsm.designpattem.factory;

/**  
 * @Title:  BMW.java   
 * @Description: Creator 所有BMW都继承自该类
 * @author: Han   
 * @date:   2016年6月20日 下午5:46:56   
 */  
abstract public class BMW {
    
    public BMW() {}
}
package com.csdhsm.designpattem.factory;

/**  
 * @Title:  BMW320.java   
 * @Description: 320型号BMW
 * @author: Han   
 * @date:   2016年6月20日 下午5:48:05   
 */  
public class BMW320 extends BMW {
    public BMW320() {
        System.out.println("制造--》BMW320");
    }
}
package com.csdhsm.designpattem.factory;

/**  
 * @Title:  BMW523.java   
 * @Description: 523型号BMW
 * @author: Han   
 * @date:   2016年6月20日 下午5:48:35   
 */  
public class BMW523 extends BMW {
    
    public BMW523() {
        System.out.println("制造--》BMW523");
    }
}

  抽象Product

package com.csdhsm.designpattem.factory;

/**  
 * @Title:  FactoryBMW.java   
 * @Description: Factory制造工厂(Product)
 * @author: Han   
 * @date:   2016年6月20日 下午5:49:24   
 */  
public interface FactoryBMW {
    BMW createBMW();
}

  ConcreteProduct

package com.csdhsm.designpattem.factory;

/**  
 * @Title:  FactoryBMW320.java   
 * @Description:  Factory of BMW320
 * @author: Han   
 * @date:   2016年6月20日 下午5:50:29   
 */  
public class FactoryBMW320 implements FactoryBMW {

    @Override
    public BMW createBMW() {
        return new BMW320();
    }
}
package com.csdhsm.designpattem.factory;

/**  
 * @Title:  FactoryBMW523.java   
 * @Description: Factory of BMW523
 * @author: Han   
 * @date:   2016年6月20日 下午5:50:12   
 */  
public class FactoryBMW523 implements FactoryBMW {

    @Override
    public BMW createBMW() {
        return new BMW523();
    }
}

  客户端

package com.csdhsm.designpattem.factory;

public class Solution {
    public static void main(String[] args) {
        FactoryBMW facBmw = new FactoryBMW320();
        facBmw.createBMW();
        facBmw = new FactoryBMW523();
        facBmw.createBMW();
    }
}

  结果

技术分享

缺点

  工厂方法的加入,使得对象的数量成倍增长。

设计模式(8)-----工厂方法模式

标签:

原文地址:http://www.cnblogs.com/a294098789/p/5601329.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!