工厂设计模式定义
定义一个创建对象的接口,让子类决定实例化哪个类,而对象的创建统一交由工厂去生成,既做到了解耦也保证了最少知识原则。一般分为三类:简单工厂模式,工厂方法模式,抽象工厂模式
简单工厂模式
创建对象的接口:
public interface IOHandler {
void save(String key,String value);
void save(String key,int value);
String getString(String key,String defalutValue);
int getInt(String key,String defalutValue);
}
对象实现接口:
public class PreferenceIoHandler implements IOHandler{
@Override
public void save(String key, String value) {
}
@Override
public void save(String key, int value) {
}
@Override
public String getString(String key, String defalutValue) {
return null;
}
@Override
public int getInt(String key, String defalutValue) {
return 0;
}
}
public class MemoyIOhander implements IOHandler {
//存在内存里面,其实就是一个Map集合
private static LruCache<String,Object> mCache= new LruCache<>(1024*1024);
@Override
public void save(String key, String value) {
}
@Override
public void save(String key, int value) {
}
@Override
public String getString(String key, String defalutValue) {
return null;
}
@Override
public int getInt(String key, String defalutValue) {
return 0;
}
}
对象的创建统一交给工厂去完成
public class IOFactory implements Factory{
// 通过 Factory 去创建 IOHandler 对象
public static IOHandler createIOHandler(IOType type){
switch (type){
case IOType.MEMORY:
// 内存缓存
return new MemoryIOHandler();
case IOType.PREFERENCES:
// Preferences缓存
return new PreferencesIOHandler();
case IOType.DISK:
// 磁盘缓存
return new DiskIOHandler();
default:
return null;
}
}
}
客户端决定去实现哪个类:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取磁盘缓存的 IOHandler
IOHandler ioHandler = IOFactory.createIOHandler(IOFactory.IOType.DISK);
// 保存数据
ioHandler.save("userName","darren");
ioHandler.save("userPwd","940223");
}
工厂方法:
一个工厂一般生产相对应的产品
创建对象的接口:
public interface IOHandler {
void save(String key,String value);
void save(String key,int value);
String getString(String key,String defalutValue);
int getInt(String key,String defalutValue);
}
对象实现接口:
public class PreferenceIoHandler implements IOHandler{
@Override
public void save(String key, String value) {
}
@Override
public void save(String key, int value) {
}
@Override
public String getString(String key, String defalutValue) {
return null;
}
@Override
public int getInt(String key, String defalutValue) {
return 0;
}
}
public class MemoyIOhander implements IOHandler {
//存在内存里面,其实就是一个Map集合
private static LruCache<String,Object> mCache= new LruCache<>(1024*1024);
@Override
public void save(String key, String value) {
}
@Override
public void save(String key, int value) {
}
@Override
public String getString(String key, String defalutValue) {
return null;
}
@Override
public int getInt(String key, String defalutValue) {
return 0;
}
}
对象的创建统一交给工厂去完成
public interface IOFactory {
IOHandler createIOhandler();
}
public class MemoryIOFactory implements IOFactory {
@Override
public IOHandler createIOhandler() {
return new MemoyIOhander();
}
}
public class PerferenceIOFactory implements IOFactory {
@Override
public IOHandler createIOhandler() {
return new PreferenceIoHandler();
}
}
客户端决定去实现哪个类:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取磁盘缓存的 IOHandler
IOFactory ioFactory = new MemoryIOFactory();
IOHandler ioHandler= ioFactory.createIOhandler();
// 保存数据
ioHandler.save("userName","darren");
ioHandler.save("userPwd","940223");
}
}
抽象工厂
定义跟 BItmapFactory 比较像,也跟简单工厂模式比较像,通过特定的方法返回单一的对象
创建对象的接口:
public interface IOHandler {
void save(String key,String value);
void save(String key,int value);
String getString(String key,String defalutValue);
int getInt(String key,String defalutValue);
}
对象实现接口:
public class PreferenceIoHandler implements IOHandler{
@Override
public void save(String key, String value) {
}
@Override
public void save(String key, int value) {
}
@Override
public String getString(String key, String defalutValue) {
return null;
}
@Override
public int getInt(String key, String defalutValue) {
return 0;
}
}
public class MemoyIOhander implements IOHandler {
//存在内存里面,其实就是一个Map集合
private static LruCache<String,Object> mCache= new LruCache<>(1024*1024);
@Override
public void save(String key, String value) {
}
@Override
public void save(String key, int value) {
}
@Override
public String getString(String key, String defalutValue) {
return null;
}
@Override
public int getInt(String key, String defalutValue) {
return 0;
}
}
对象的创建统一交给工厂去完成
public class IOHandlerFactory {
public static IOHandler createIohandler(Class<? extends IOHandler> IiohanflerClass){
IOHandler ioHandler = null;
try {
ioHandler= IiohanflerClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return ioHandler;
}
public static IOHandler getMemoryIOHandler(){
return createIohandler(MemoyIOhander.class);
}
public static IOHandler getPreferenceIOHandler(){
return createIohandler(PreferenceIoHandler.class);
}
}
客户端决定去实现哪个类:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取磁盘缓存的 IOHandler
IOHandler ioHandler = IOHandlerFactory.getMemoryIOHandler();
// 保存数据
ioHandler.save("userName","darren");
ioHandler.save("userPwd","940223");
}
}
使用场景:
使用的对象有共性,并且在以后存在多样性。并且我们的创建的对象的过程不想让别人知道并比较复杂。
实例:
数据库创建(Factory),地图的选择(百度,高德,google),加载图片类型的选择(ImageLoader,Glide,Picasso),源码(BitmapFactory,XmlPullParserFactory)
网友评论