【设计模式】抽象工厂模式(Abstract Factory Pattern)

【前言】

上次针对自己的理解书写一篇工厂模式的文章,后面对于工厂模式进行更加多的学习,于是了解到了抽象工厂模式。其实网上大多数人们都是抽象工厂模式是工厂模式的升级版本,虽然我并不知道所说的升级是什么意思,但是升级给我一种模糊的感觉。

学习了解抽象工厂模式还是不容易,我前前后后花了好几天去思考,阅览相关的代码例子,才对抽象工厂模式有一点了解。

为了准确理解升级这个词在工厂模式上的意思,我认为这样表示更好:多工厂模式(一个接口有多个工厂类,每个工厂类都可以创建接口的实例)

【特点】

1. 抽象工厂模式拥有工厂模式的特点

2.一个接口对应有多个工厂,可以归纳为一对多关系

【适用】

1.接口的业务实现产生分类的概念,每种分类都有对应的一个以上实现类。

【图解】

【例子】

// 图片二值化接口(黑白化)
public interface Binarization{
    public Image getBinarizationImage();
}

// 速度优先的算法(分类一)
public abstract class SpeedBinarization implements Binarization{

}

// 空间优先的算法(分类二)
public abstract class SpaceBinarization implements Binarization{

}

// 速度优先算法1
public class SpeedAlgorithm1 extends SpeedBinarization{
    public Image getBinarizationImage(){
        // do some thing
    }
}

// 速度优先算法2
public class SpeedAlgorithm2 extends SpeedBinarization{
    public Image getBinarizationImage(){
        // do some thing
    }
}


// 空间优先算法1
public class SpaceAlgorithm1 extends SpaceBinarization{
    public Image getBinarizationImage(){
        // do some thing
    }
}

// 空间优先算法2
public class SpaceAlgorithm2 extends SpaceBinarization{
    public Image getBinarizationImage(){
        // do some thing
    }
}
// 抽象工厂
public interface BinarizationFactory{
    public Binarization getBinarization(String name);  
}

// 速度优先的工厂
public class SpeedFactory implements BinarizationFactory{
    public Binarization getBinarization(String name){
        if(name.equals("one")){
            return new SpeedAlgorithm1();
        }else if(name.equals("two")){
            return new SpeedAlgorithm2();
        }
        return null;
    }
}

// 空间优先的工厂
public class SpaceFactory implements BinarizationFactory{
    public Binarization getBinarization(String name){
        if(name.equals("one")){
            return new SpaceAlgorithm1();
        }else if(name.equals("two")){
            return new SpaceAlgorithm2();
        }
        return null;
    }
}
// 抽象工厂创建器
public
class BinarizationFactoryCreator{ public static BinarizationFactory getFactory(String factory){ if(factory.equals("speed")){ return new SpeedFactory(); }else if(factory.equals("space")){ return new SpaceFactory(); } return null; } }

猜你喜欢

转载自www.cnblogs.com/nicojerry/p/10400466.html
今日推荐