// 第一次进来 先创建 然后缓存
if (anInterface != null) {
map.put(position, anInterface);
}
}
return anInterface;
}
}
在使用的使用直接获取: Impl1 impl1 = (Impl1) Factory.createInterface(0);
-常使用的场景:创建Fragment
public class FragmentFactory {
private static Map<Integer, Fragment> map = new HashMap<>();
public static Fragment createFragment(int position) {
Fragment fragment = map.get(position);
if (fragment == 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”;
}
}
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-Q4YGZJFC-1715489544260)]
[外链图片转存中…(img-Ckw2rGry-1715489544263)]
[外链图片转存中…(img-5CLmzpPs-1715489544265)]
[外链图片转存中…(img-6QUaJT4a-1715489544266)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!