设计模式----工厂模式

概述

设计模式一书中讲到,工厂方法的意图是定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类。它还有个别名----虚构造器

普通工厂模式

创建一个工厂,工厂内包含微信支付和支付宝支付:

(1)首先我们需要建立一个接口,来规范类的功能:

public interface Pay{
    public void pay();
}

(2)创建微信支付和支付宝支付,并实现发送接口:

public class AlilyPay implements Pay{
    @Override
    public void pay() {
        System.out.println("测试"+"welcome to alilyPay!!!");
    }
}
public class WxPay implements Pay{
    @Override
    public void pay() {
        System.out.println("测试"+"welcome to wxPay!!!");
    }
}

(3)创建工厂类,给外部暴露指定参数的接口:

public class PayFactory {
    public Pay produce(String type) {
        if(type.equals("alilyPay")){
            return new AlilyPay();

        }else if(type.equals("wxPay")){
            return new WxPay();
        }else{
            System.out.println("请输入正确的类型");
            return null;
        }
    }
}

(4)进行测试:

public class FactoryTest {

    public static void main(String[] args){

        PayFactory payFactory = new PayFactory ();

        Pay pay = payFactory.produce("wxPay ");

        pay.pay ();

    }

}

从上我们可以看出,该工厂方法,首先需要实现相关接口,这个功能较为明确,即为发送;但是在通过工厂类实例化其中的类时发现容错性较差,或者说限制太多。

多工厂模式

在多工厂模式中,我们只需要将工厂类的方法通过子服匹配修改为指定调用方法来实例化类对象,这里为了偷懒,我只进行工厂代码修改如下‘

public class SendFactory {

    public Pay produceAlilyPay () {
        return new AlilyPay ();
    }

    public Pay produceWxPay () {
        return new WxPay ();
    }
}

测试:

public class FactoryTest {
    public static void main(String[] args){
        PayFactory payFactory = new PayFactory ();
        Pay pay= payFactory. produceAlilyPay ();
        pay.pay ();
        Pay pay= payFactory. produceWxPay ();
        pay.pay ();
    }
}

静态工厂模式

即将多工厂模式中,工厂代码中方法修改为静态的即可

posted @ 2019-04-26 22:33  Kill(Bug)  阅读(98)  评论(0)    收藏  举报