android设计模式—简单工厂和工厂方法(抽象)设计模式

public class FragmentFactory {

private static Map<Integer, Fragment> map = new HashMap<>();

public static Fragment createFragment(int position) {

Fragment fragment = map.get(position);

if (fragm

ent == null) {

if (position == 0) {

fragment = new ConversationListFragment();

} else if (position == 1) {

fragment = new ContactListFragment();

}

if (fragment != null) {

map.put(position, fragment);

}

}

return fragment;

}

}

工厂方法


工厂方法在java和android里很是常用,例如:set集合,list集合

工厂方法:把对象的实现延迟到子类完成

步骤大致为:产品(接口统一,定义各种需要实现的方法)--->具体的产品的实现(代表具体的实现功能的)--->创建器(工厂统一接口)--->具体工厂的创建(产生具体的产品)

  • 产品(接口统一,定义各种需要实现的方法)

/**

  • 产品,接口统一工厂实现

*/

public interface Product {

String allSay();

}

  • 具体的产品的实现(代表具体的实现功能的)

/**

  • 具体的产品的实现(代表具体的实现功能的)

*/

public class ConcreteProduct1 implements Product{

@Override

public String allSay() {

return "我是方法ConcreteProduct1";

}

}

/**

  • 具体的产品的实现(代表具体的实现功能的)

*/

public class ConcreteProduct2 implements Product {

@Override

public String allSay() {

return "我是方法ConcreteProduct2";

}

}

  • 创建器(工厂统一接口)

/**

  • 创建器------规范创建具体类

*/

public abstract class Factory {

/**

  • 创建Product的工厂方法

  • @return

*/

public abstract Product factoryMethod();

}

  • 具体工厂的创建(产生具体的产品)

/**

  • 具体的创建器,创建对应的实现类

  • 对应ConcreteProduct1

*/

public class ConcreteFactory1 extends Factory {

@Override

public Product factoryMethod() {

return new ConcreteProduct1();

}

}

/**

  • 具体的创建器,创建对应的实现类

  • 对应ConcreteProduct2

*/

public class ConcreteFartory2 extends Factory {

@Override

public Product factoryMethod() {

return new ConcreteProduct2();

}

}

  • 使用具体类

public class MainActivity extends AppCompatActivity {

private Product concreteProduct1;

private Product concreteProduct2;

@RequiresApi(api = Build.VERSION_CODES.KITKAT)

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

/**

  • 方式一

*/

//工厂方法

ConcreteFactory1 concreteCreator = new ConcreteFactory1();

// 调用公用方法

concreteProduct1 = concreteCreator.factoryMethod();

ConcreteFartory2 concreteFartory2 = new ConcreteFartory2();

concreteProduct2 = concreteFartory2.factoryMethod();

}

public void onClickOne(View view) {

String s = concreteProduct1.allSay();

Log.d("huangxiaoguo", s);

}

public void onClickTwo(View view) {

String s = concreteProduct2.allSay();

Log.d("huangxiaoguo", s);

}

}

这里就实现了工厂方法的简单模型


使用反射重构工厂方法调用


  • 产品类接口

/**

  • 产品,接口统一工厂实现

  • 注意这里的Product 可以使用接口(interface )也可以是抽象类abstract

  • 如果是接口,子类去实现,如果是抽象类,子类去继承

  • 如果有共同的操作建议使用---抽象类

*/

public interface Product {

产品类的抽象方法,由具体的产品类去实现

String allSay();

}

/**

*或者

*/

public abstract class Product {

产品类的抽象方法,由具体的产品类去实现

public abstract String allSay();

}

  • 具体产品类

/**

  • 具体的产品的实现(代表具体的实现功能的)

*/

public class ConcreteProduct1 implements Product {

@Override

public String allSay() {

return "我是方法ConcreteProduct1";

}

}

/**

  • 具体的产品的实现(代表具体的实现功能的)

*/

public class ConcreteProduct2 implements Product {

@Override

public String allSay() {

return "我是方法ConcreteProduct2";

}

}


/**

  • 或者

*/


/**

  • 具体的产品的实现(代表具体的实现功能的)

*/

public class ConcreteProduct1 extends Product {

@Override

public String allSay() {

return "我是方法ConcreteProduct1";

}

}

/**

  • 具体的产品的实现(代表具体的实现功能的)

*/

public class ConcreteProduct2 extends Product {

@Override

public String allSay() {

return "我是方法ConcreteProduct2";

}

}

  • 抽象工厂

/**

  • 创建器------规范创建具体类

*/

public abstract class Factory {

/**

  • 创建Product的工厂方法

  • @param clz 产品对象类型

  • @return 具体的产品类型

*/

public abstract T createProduct(Class clz);

}

  • 具体工厂

/**

  • 具体的创建器,创建对应的实现类

  • 对应ConcreteProduct

*/

public class ConcreteFactory extends Factory {

@Override

public T createProduct(Class clz) {

Product p = null;

try {

p = (Product) Class.forName(clz.getName()).newInstance();

} catch (Exception e) {

e.printStackTrace();

}

return (T) p;

}

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取

tory extends Factory {

@Override

public T createProduct(Class clz) {

Product p = null;

try {

p = (Product) Class.forName(clz.getName()).newInstance();

} catch (Exception e) {

e.printStackTrace();

}

return (T) p;

}

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

外链图片转存中...(img-f4U2DcPV-1719021170239)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取

相关推荐
编程乐学(Arfan开发工程师)21 分钟前
06、基础入门-SpringBoot-依赖管理特性
android·spring boot·后端
androidwork41 分钟前
使用 Kotlin 和 Jetpack Compose 开发 Wear OS 应用的完整指南
android·kotlin
繁依Fanyi2 小时前
Animaster:一次由 CodeBuddy 主导的 CSS 动画编辑器诞生记
android·前端·css·编辑器·codebuddy首席试玩官
Java致死4 小时前
设计模式Java
java·开发语言·设计模式
奔跑吧 android4 小时前
【android bluetooth 框架分析 02】【Module详解 6】【StorageModule 模块介绍】
android·bluetooth·bt·aosp13·storagemodule
田一一一7 小时前
Android framework 中间件开发(三)
android·中间件·framework·jni
androidwork12 小时前
掌握 Kotlin Android 单元测试:MockK 框架深度实践指南
android·kotlin
田一一一12 小时前
Android framework 中间件开发(二)
android·中间件·framework
追随远方13 小时前
FFmpeg在Android开发中的核心价值是什么?
android·ffmpeg
神探阿航14 小时前
HNUST湖南科技大学-安卓Android期中复习
android·安卓·hnust