JAVA 设计模式之简单工厂、工厂方法、抽象工厂

OOP(接口)设计模式,(Object Oriented Programming,OOP,面向对象程序设计);主要是封装、隔离、降低耦合度,规范功能等;可以是interface 也可以是class 或method().

1、简单工厂,提供创建对象的功能,不需要关心具体的实现。好处,降低客户端与模块之间的耦合度。

场景 BitmapFactory.decodeResource()。

public interface API {
    void operator();
}

==================================
public class Factory {
//使用参数
    public static API create(int type){
        switch (type){
            case 1:
                return  new ImplA();
            case 2:
                return new ImplB();
            case 3:
                return new ImplC();
                default:
                    return new ImplC();

        }

    }
// 使用泛型
    public static  <T extends API> T createProduct(Class<T> clz){
        API api = null;
        try {
            api= (API) Class.forName(clz.getName()).newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        return (T) api;
    }
}

==============================

public class ImplA implements API {
    @Override
    public void operator() {
        System.out.println("operator A");
    }
}

//类似有ImplB ImplC 

==============================================

调用方法一
API api1 = Factory.create(1);
API api2 = Factory.create(2);
API api3 = Factory.create(3);
api1.operator();
api2.operator();
api3.operator();
方法二
API api = Factory.createProduct(ImplA.class);
api.operator();

2、工厂方法,开发一个导出数据的框架,(确定要导出数据做事情,不确定导出什么类型的文件);

定义一个用于创建对象的接口,让子类决定实例化哪一个类;工厂方法使一个类的实例化延迟到创建器的子类中。

好处,扩充性强,父类代码的复用。场景 CursorFactory,ArrayList,LayoutInflate。。。。

public interface ExportFileApi {
    public boolean export(String data);
}

==============================================

public abstract class ExportOprator {
    // 工厂方法:核心就是实例化延迟到子类去实现
public abstract ExportFileApi factoryMethod();
public boolean export(String data){
        ExportFileApi api = factoryMethod();

    return api.export(data);
    }
}
=====================================================================
 
 
public class ExportTextFile implements ExportFileApi {
    @Override
    public boolean export(String data) {
        System.out.println("data "+data);

        return false;
    }
}
=================================================================
 
public class ExportTextFileOprator extends ExportOprator {
    @Override
    public ExportFileApi factoryMethod() {
        return new ExportTextFile();
    }
}
=====================调用===================================
 
ExportOprator oprator = new ExportTextFileOprator();
oprator.export("text ");
3、抽象工厂:简单工厂和工厂方法的一个组合体,最早应用于跨平台语言,好处:选择产品族的实现。
场景语言的跨平台实现,MediaPlayerFactory.cpp
 
public interface IApi {
    void show();
}
==============================================
public interface IFactory {
    IApi create();
}
====================================================
public class AndroidApi implements IApi {
    @Override
    public void show() {
        System.out.println("androidApi");
    }
}
 
======================================================
public class AndroidFactory implements IFactory {
    @Override
    public IApi create() {
        return new AndroidApi();
    }
}
=================调用======================
new AndroidFactory().create().show();
可以添加其他类型 传参
        int i=0;
        if(i==1) {
            new IOSFactory().create(1).show();
//            MediaPlayer m = new MediaPlayer();
        }else if(i==2){
            new AndroidFactory().create(2).show();
        }
   

 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值