工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类。
工厂模式主要用以下三种形态:
1:简单工厂(Simple Factory)。
2:工厂方法(Factory Method)。
3:抽象工厂(Abstract Factory)。
一、简单工厂:
又叫静态工厂,是工厂模式三中状态中结构最为简单的。主要有一个静态方
法,用来接受参数,并根据参数来决定返回实现同一接口的不同类的实例。
1)先定义一个接口
public interface Product{}
2)工厂产品实现该接口
public class Washer implements Product{
public Washer(){
System.out.println("洗衣机被制造了");
}
}
public class Icebox implements Product{
public Icebox(){
System.out.println("冰箱被制造了");
}
}
public class AirCondition implements Product{
public Icebox(){
System.out.println("空调被制造了");
}
}
3)工厂类,负责生产以上产品
public class SimpleFactory {
public static Product factory(String productName) throws Exception{
switch(productName){
case Washer:return new Washer();
case Icebox:return new Icebox();
case AirCondition:return AirCondition();
default:throw new Exception("没有该产品");
}
}
}
二、工厂方法
工厂方法为工厂类定义了接口,用多态来削弱了工厂类的职能
1)工厂接口
public interface Factory{
public Product create();
}
2)产品接口
public interface Product{}
3)产品接口的产品类
public class Washer implements Product{
public Washer(){
System.out.println("洗衣机被制造了");
}
}
public class Icebox implements Product{
public Icebox(){
System.out.println("冰箱被制造了");
}
}
public class AirCondition implements Product{
public Icebox(){
System.out.println("空调被制造了");
}
}
4)具体创建产品对象的具体工厂类
public class CreateWasher implements Factory{
public Product create(){
return new Washer();
}
}
//创建冰箱的工厂
public class CreateIcebox implements Factory{
public Product create(){
return new Icebox();
}
}
//创建空调的工厂
public class CreateAirCondition implements Factory{
public Product create(){
return new AirCondition();
}
}
从上面创建产品对象的代码可以看出,工厂方法和简单工厂的主要区别是,简单工厂
是把创建产品的职能都放在一个类里面,
优点:工厂方法则把不同的产品放在实现了工厂接口的不同工厂类里面,这样就算其
中一个工厂类出了问题,其他工厂类也能正常工作,互相不受影响,以后增加新产品,也
只需要新增一个实现工厂接口工厂类,就能达到,不用修改已有的代码。
缺点:但工厂方法也有他局限的地方,那就是当面对的产品有复杂的等级结构的时候
,例如,工厂除了生产家电外产品,还生产手机产品,这样一来家电是手机就是两大产品
家族了,这两大家族下面包含了数量众多的产品,每个产品又有多个型号,这样就形成了
一个复杂的产品树了。如果用工厂方法来设计这个产品家族系统,就必须为每个型号的产
品创建一个对应的工厂类,当有数百种甚至上千种产品的时候,也必须要有对应的上百成
千个工厂类,这就出现了传说的类爆炸,对于以后的维护来说,简直就是一场灾难.....
三、抽象工厂
抽象工厂:意的意图在于创建一系列互相关联或互相依赖的对象。工厂方法用来创建一个产品,它没有分类的概念,而抽象工厂则用于创建一系列产品,所以产品分类成了抽象工厂的重点。
1)产品分类接口
//洗衣机接口
public interface Washer{
}
//冰箱接口
public interface Icebox{
}
2)上面两个接口的具体产品
//洗衣机-A
public class WasherA implements Washer{
public WasherA(){
System.out.println("洗衣机-A被制造了");
}
}
//洗衣机-B
public class WasherB implements Washer{
public WasherB(){
System.out.println("洗衣机-B被制造了");
}
}
//冰箱-A
public class IceboxA implements Icebox{
public IceboxA(){
System.out.println("冰箱-A被制造了");
}
}
//冰箱-B
public class IceboxB implements Icebox{
public IceboxB(){
System.out.println("冰箱-B被制造了");
}
}
3)工厂部分,工厂行为接口
public interface Factory{
public Washer createWasher();
public Icebox createIcebox();
}
4)实现具体工厂
//创建型号为A的产品工厂
public class FactoryA implements Factory{
//创建洗衣机-A
public Washer createWasher(){
return new WasherA();
}
//创建冰箱-A
public Icebox createIcebox(){
return new IceboxA();
}
}
//创建型号为B的产品工厂
public class FactoryB implements Factory{
//创建洗衣机-B
public Washer createWasher(){
return new WasherB();
}
//创建冰箱-B
public Icebox createIcebox(){
return new IceboxB();
}
}
本文深入解析工厂模式的三种形态:简单工厂、工厂方法和抽象工厂。通过实例代码详细讲解每种模式的特点、优缺点及适用场景。

942

被折叠的 条评论
为什么被折叠?



