JAVA_初识工厂模式

来源:互联网 发布:阿里云有香港主机 编辑:程序博客网 时间:2024/06/15 23:13

初认识工厂模式


角色分配

  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