设计模式之-工厂模式

简单工厂模式

简单工厂模式是指由一个工厂对象决定创建出哪种产品类的实例,但它不属于23种设计模式.

代码演示如下:

定义一个支付接口

public interface IPay {
    void pay();
}

定义两个支付类支付宝和微信

public class AliPay implements IPay {
    @Override
    public void pay() {
        System.out.println("使用支付宝");
    }
}
public class WeixinPay implements IPay {
    @Override
    public void pay() {
        System.out.println("使用微信支付");
    }
}

定义工厂类

public class PayFactory {
    public static IPay creatPayMethod(Class clazz){
        if (clazz != null) {
            try {
                return clazz.newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

然后测试

public class FactoryTest {
    public static void main(String[] args) {
        PayFactory.creatPayMethod(AliPay.class).pay();
    }
}

工厂方法模式

工厂方法模式(Fatory Method Pattern)是指定义一个创建对象的接口,但让实现这个 接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。在工厂方法 模式中用户只需要关心所需产品对应的工厂,无须关心创建细节,而且加入新的产品符 合开闭原则。
代码如下:

public interface IPayFactory {
    IPay creat();
}
public class AlipayFactory implements IPayFactory {
    @Override
    public IPay creat() {
        return new AliPay();
    }
}
public class WeixinPayFactory implements IPayFactory {
    @Override
    public IPay creat() {
        return new WeixinPay();
    }
}
public class MethodFactoryTest {
    public static void main(String[] args) {
        AlipayFactory alipayFactory = new AlipayFactory();
        IPay alipay = alipayFactory.creat();
        alipay.pay();
    }
}
工厂方法适用于以下场景:

1、创建对象需要大量重复的代码。

2、客户端(应用层)不依赖于产品类实例如何被创建、实现等细节。

3、一个类通过其子类来指定创建哪个对象。

工厂方法也有缺点:

1、类的个数容易过多,增加复杂度。

2、增加了系统的抽象性和理解难度。

抽象工厂模式

抽象工厂模式(Abastract Factory Pattern)是指提供一个创建一系列相关或相互依赖 对象的接口,无须指定他们具体的类。客户端(应用层)不依赖于产品类实例如何被创 建、实现等细节,强调的是一系列相关的产品对象(属于同一产品族)一起使用创建对 象需要大量重复的代码。需要提供一个产品类的库,所有的产品以同样的接口出现,从 而使客户端不依赖于具体实现。

你可能感兴趣的:(JAVA)