Android 设计模式入门到精通之二:工厂方法模式(Factory Method)

版权声明:本文为博主原创文章,未经允许不得转载,如有问题,欢迎指正,谢谢! https://blog.csdn.net/cbk861110/article/details/88071015

设计模式项目源码请移步:https://github.com/caobaokang419/WeatherApp(欢迎Github Fork&Star,代码设计模式&框架设计实现不妥之处,请帮忙指正),谢谢!

一、简单工厂方法(Simple Factory Method,也叫静态工厂

1. 概念及技术背景

用一个工厂类去封装new的工厂,返回新建的一个对象的引用。如果这个方法是静态的,就称之为静态工厂。

2. 代码实践

public class DownloadFactory {
    public enum DownloadType {
        TYPE_DOWNLOAD_XUTILS,
        TYPE_DOWNLOAD_FILELOADER
    }

    public static IDownload createDownloadImpl(DownloadType type){//封装不同类型的对象创建        if(type == DownloadType.TYPE_DOWNLOAD_XUTILS){
            return new XUtilsDownloadImpl();
        }else{
            return new FileLoaderDownloadImpl();
        }
    }
}
public interface IDownload {
    void startDownload(String url, IDownloadCallback iDownloadCallback);
    void pauseDownload();
    void cancelDownload();
}
public class XUtilsDownloadImpl implements IDownload {
    @Override
    public void startDownload(String url, IDownloadCallback iDownloadCallback) {
    }

    @Override
    public void pauseDownload() {
    }

    @Override
    public void cancelDownload() {
    }
}
public class DownloadService extends Service {
    private DownloadBinder mBinder = new DownloadBinder();
    private static IDownload mIDownload;

    @Override
    public void onCreate() {
        super.onCreate();
        //静态工厂方法 创建指定类型对象
        mIDownload = DownloadFactory.createDownloadImpl(DownloadType.TYPE_DOWNLOAD_XUTILS); 
    }
}

二、工厂方法模式

1. 概念及技术背景

在父类声明一个final方法用来真正被外部调用(在子类中被继承但是不允许覆盖)。在这个方法中调用一个抽象方法去具体实现新建对象,可是这个抽象方法本身由子类实现。


三、抽象工厂模式

1. 概念及技术背景

先定义一个基础接口,然后用不同的工厂实现这个接口。在具体的类需要创建的时候,传入一个向上转型的工厂,通过调用这个工厂的方法实现创建对象。和前面的继承来实现相比,这里通过组合来实现了解耦合。同时,可以在抽象工厂中创建多个需要的对象。

猜你喜欢

转载自blog.csdn.net/cbk861110/article/details/88071015
今日推荐