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();
}