美文网首页设计模式
设计模式-工厂

设计模式-工厂

作者: isLJli | 来源:发表于2020-04-14 17:30 被阅读0次

工厂设计模式定义
定义一个创建对象的接口,让子类决定实例化哪个类,而对象的创建统一交由工厂去生成,既做到了解耦也保证了最少知识原则。一般分为三类:简单工厂模式,工厂方法模式,抽象工厂模式

简单工厂模式
创建对象的接口:

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)

相关文章

  • 设计模式四、抽象工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 抽象工厂模式 ...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • 设计模式三、工厂模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 工厂模式 在一...

  • 工厂模式

    java设计模式-工厂模式 工厂模式: 工厂模式是java设计模式里最常用的设计模式之一。 工厂模式属于创建型模式...

  • 单件设计模式

    一、定义 设计模式 设计模式就是一种更好的编写代码方案。 常见设计模式 工厂设计模式、抽象工厂设计模式、抽象工厂设...

  • iOS设计模式(三)之抽象工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(一)之简单工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(二)之工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • 设计模式一、单例模式

    系列传送门设计模式一、单例模式设计模式二、简单工厂模式设计模式三、工厂模式设计模式四、抽象工厂模式 简单单例(推荐...

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

网友评论

    本文标题:设计模式-工厂

    本文链接:https://www.haomeiwen.com/subject/xditvhtx.html