简单工厂模式
简单工厂模式是指由一个工厂对象决定创建出哪种产品类的实例,但它不属于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<? extends IPay> 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)是指提供一个创建一系列相关或相互依赖 对象的接口,无须指定他们具体的类。客户端(应用层)不依赖于产品类实例如何被创 建、实现等细节,强调的是一系列相关的产品对象(属于同一产品族)一起使用创建对 象需要大量重复的代码。需要提供一个产品类的库,所有的产品以同样的接口出现,从 而使客户端不依赖于具体实现。