设计模式:工厂模式

工厂模式是一种创建型的设计模式,个人感觉就是帮助我们new出对象的一种手段。。

1.工厂模式:

T利用多态,几种工厂类实现接口后,调用方法。这样用户不再需要关心创建过程即可new对象:

工厂类:

public class SanluFactory implements  Factory {
    @Override
    public Milk getMilk() {
        return new Sanlu();
    }
}

接口类:

/**
 * 工厂模型
 * Created by Tom on 2018/3/4.
 */
public interface Factory {

    //工厂必然具有生产产品技能,统一的产品出口
    Milk getMilk();

}

调用:

public class FactoryTest {
    public static void main(String[] args) {
        //System.out.println(new Factory().getMilk(););


        //货比三家
        //不知道谁好谁好谁坏
        //配置,可能会配置错
        Factory factory = new SanluFactory();
        System.out.println(factory.getMilk());

    }
}

2.静态工厂模式:

是spring中用到最多的模式!

1.静态工厂类:

/**
 *
 * 抽象工厂是用户的主入口
 * 在Spring中应用得最为广泛的一种设计模式
 * 易于扩展
 * Created by Tom on 2018/3/4.
 */
public abstract class AbstractFactory {

    //公共的逻辑
    //方便于统一管理

    /**
     * 获得一个蒙牛品牌的牛奶
     * @return
     */
    public  abstract Milk getMengniu();

    /**
     * 获得一个伊利品牌的牛奶
     * @return
     */
    public abstract  Milk getYili();

    /**
     * 获得一个特仑苏品牌的牛奶
     * @return
     */
    public  abstract  Milk getTelunsu();

    public abstract Milk getSanlu();

}

这里在静态工厂类出了可以写静态方法,还可以定义一些公共逻辑

2.工厂类

public class MilkFactory extends  AbstractFactory {


    @Override
    public Milk getMengniu() {
        return new Mengniu();
    }

    @Override
    public Milk getYili() {
        return new Yili();
    }

    @Override
    public Milk getTelunsu() {
        return new Telunsu();
    }

    @Override
    public Milk getSanlu() {
        return new Sanlu();
    }
}

这里new的地方可以使用一下普通工厂类来做进一步解耦

3.调用:

public class AbstractFactoryTest {

    public static void main(String[] args) {

        MilkFactory factory = new MilkFactory();

        //对于用户而言,更加简单了
        //用户只有选择的权利了,保证了程序的健壮性
        System.out.println(factory.getSanlu());

    }

}

以上

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值