JAVA_初识工厂模式

初认识工厂模式


角色分配

  1. 抽象工厂
  2. 具体工厂
  3. 抽象产品
  4. 具体产品

用抽象来解耦我们用具体的代码来看下任务分配;

  1. 我们先来建立一个抽象产品类,抽象产品提供产品功能,不告知具体功能使用的结果
package pattern.factory;

/**
 * Created by jsion on 16/8/24.
 * 抽象产品,仿真女孩玩具俗称(Chongqi baby)
 */

public abstract class RealGirlProduct {
    /**
     * 抽象产品的具体作用
     */
    public abstract void makeManHappy();
}
  1. 抽象工厂,提供工厂制造产品线的任务,都是生产congqi baby可能只有外形不一样,但是具体的功能还是统一的,所以抽象工厂提供的生产产品的方法就是抽象产品
package pattern.factory;

/**
 * Created by jsion on 16/8/24.
 * 抽象工厂,我们用泛型T来做一个泛型的限制,用于具体工厂方便返回
 */

public abstract class RealGirlFactory {
    public abstract <T extends RealGirlProduct> T createRealGirl(Class<T> clz);
}
  1. 具体工厂,根据工厂的功能,不同的工厂最终生产的产品线都是一样的,都具有抽象工厂的功能
package pattern.factory;

/**
 * Created by jsion on 16/8/24.
 * 具体工厂实现了抽象工厂中的制作方法,根据不同的需求,制作不同的产品
 */
public class HappyRealFactory extends RealGirlFactory {
    @Override
    public <T extends RealGirlProduct> T createRealGirl(Class<T> clz) {
        RealGirlProduct realGirlProduct = null;
        if (null != clz) {
            try {
                realGirlProduct = (RealGirlProduct) Class.forName(clz.getName()).newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return (T) realGirlProduct;
    }
}
  1. 最后就是我们的具体产品类,但是不同的客户需求不一样,但是最终的功能肯定是抽象产品的功能,所以我们看下具体产品的类
package pattern.factory;

/**
 * Created by jsion on 16/8/24.
 */

public class LinZhingLingReal extends RealGirlProduct {
    @Override
    public void makeManHappy() {
        System.out.println("林志玲款式real---->make you happy!!");
    }
}



package pattern.factory;

/**
 * Created by jsion on 16/8/24.
 */

public class FangBingBingReal extends RealGirlProduct {
    @Override
    public void makeManHappy() {
        System.out.println("仿真范冰冰款式--->>>make you happy!!");
    }
}

package pattern.factory;

/**
 * Created by jsion on 16/8/24.
 */

public class MaRongReal extends RealGirlProduct {
    @Override
    public void makeManHappy() {
        System.out.println("马蓉真人--这个碧池--make every one happy!!");
    }
}

从上面的可以看到不同的产品线有不同的产品,但是最终的功能都是抽象产品定义的那样!

ok到此为止我们的工厂模式各个角色都完善了,现在开始生产baby了,

public class ATPatternTest {
    public static void main(String[] args) throws Exception {
        /**
         * 制造几个明星娃娃,传入客户需求
         */
        RealGirlFactory realGirlFactory = new HappyRealFactory();
        LinZhingLingReal linZhingLingReal = realGirlFactory.createRealGirl(LinZhingLingReal.class);
        MaRongReal maRongReal = realGirlFactory.createRealGirl(MaRongReal.class);
        FangBingBingReal fangBingBingReal = realGirlFactory.createRealGirl(FangBingBingReal.class);
        /**
         * 执行各位的工厂方法
         */
        linZhingLingReal.makeManHappy();
        fangBingBingReal.makeManHappy();
        maRongReal.makeManHappy();
    }
}

最后的结果就很明显了;不同的业务线生产不同的产品,都会具有抽象产品的功能
大家看下结果;

这里写图片描述

荆轲刺秦王_END

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值