我的设计模式学习之路二——工厂模式

一、介绍

   程序的设计来源生活,面向对象的程序语言更是如此。
举个例子:我们要生产一件衣服,一双鞋子等等,而他们都属于穿戴物品,有共同
还可以应付,但要是需要创建大量的物品呢,是不是太麻烦?为了简化操作,我们会
造一个工厂,来大量的生产我们想要的物品。

二、作用

凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。

三、实现

需求:我们需要生产衣服、鞋子
1、首先他们有一个共同的属性:颜色


/**
 * 父类穿戴
 * @author jztx
 *
 */
interface Wear
{
public void color();
}
2、衣服和鞋子需要实现这个接口
/**
 * 需要制造的衣服类
 * @author BeiKe
 *
 */
class Clothes implements Wear
{
    @Override
    public void color() {
        System.out.println("我是白色的!");   
    }
}
/**
 * 需要制造的鞋子类
 * @author BeiKe
 *
 */
class  Shoes implements Wear
{
    @Override
    public void color() {

        System.out.println("我是黑色的!");
    }
}
3、我们知道要创建什么东西了,这时我们需要建立一个工厂来生产这些东西
/**
 * 创建一个工厂,需要制造很多这些衣服
 * @author BeiKe
 *
 */
class Factory
{
    /**
     * 返回一件衣服
     * @return
     */
    public static Wear factoryMakeClothes()
    {
        return new Clothes();
    }
    /**
     * 返回一双鞋子
     * @return
     */
    public static Wear factoryMakeShoes()
    {
        return new Shoes();
    }

}
4、现在我们可以开始生产东西了
   /**
     * 设计模式-工厂模式
     * @param args
     */
    public static void main(String[] args) {
        Factory.factoryMakeClothes().color();
        Factory.factoryMakeShoes().color(); 
    }
这样我们就可以随心所欲的生产这两个物品了。
   但是这样创建就会出现一个问题,我们的工厂就只能生产衣服和鞋子,但要是某一
天我们需要裤子怎么办呢?这就需要改动工厂,这很明显不符合面向对象设计封装的思
想,所以我们需要对这个工厂做出改进。
代码:
/**
 * 我们抽象化一个工厂,里面就只有制造一个方法
 * @author jztx
 *
 */
interface Factory
{
    public Wear make();
}
/**
 * 我们再实现这个工程里面的方法,具体化制造什么
 * @author jztx
 *
 */
class FactoryMakeClothes implements Factory
{

    @Override
    public Wear make() {
        return new Clothes();
    }

}
class FactoryMakeShoes implements Factory
{

    @Override
    public Wear make() {

        return new Shoes();
    }

}
再调用:
/**
     * 设计模式-工厂模式
     * @param args
     */
    public static void main(String[] args) {
        new FactoryMakeClothes().make().color();
        new FactoryMakeShoes().make().color();  
    }
就这样我们可以随意的添加制造的东西。

注:源码:http://pan.baidu.com/s/1ntEBNRV

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值