抽象类与接口及简单的工厂模式
来源:互联网 发布:测量图片尺寸软件 编辑:程序博客网 时间:2024/04/30 20:56
抽象类;
(1得1失)得到抽象方法的能力,失去创建实例的能力
某个父类只知道子类可能需要有这些方法,但是不知道具体的实现方式;抽象类和抽象方法能更好的发挥多态
理由:一定发生继承。一定会发生方法的重写();类的多态性体现!
eg:baseFragment:
注意到除了生命周器的抽取外,其中的MainActivitiy 是fragment和所在Activity中组件沟通的重要桥梁!
public abstract class BaseFragment extends Fragment{ 这也是fragment和activity内的组件沟通的重要桥梁protected MainActivity mainActivity;//上下文@Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);mainActivity = (MainActivity) getActivity();//获取fragment所在Activity;}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View root = initView(); //Viewreturn root;}/** * 必须覆盖此方法来完全界面的显示 * @return */public abstract View initView();/** * 子类覆盖此方法来完成数据的初始化 */public void initData(){}/** * 子类覆盖此方法来完成事件的添加 */public void initEvent(){}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {//初始化事件和数据super.onActivityCreated(savedInstanceState);initData();//初始化数据initEvent();//初始化事件}}
当界面相似的情况下,我们一可以通过类的方式抽取基类进行简化处理:
例如 Viewpager 中几个相似的View 界面都很相似,我们抽取后只需要 覆写几个方法即可完成不同界面的相似性布局。
eg:
public class BaseTagPage{protected MainActivity mainActivity;protected Viewroot;protected ImageButtonib_menu;//按钮ibprotected TextViewtv_title;protected FrameLayoutfl_content;protected ImageButton ib_listOrGrid;public BaseTagPage(MainActivity context){this.mainActivity = context;initView();//初始化布局initEvent();}public void initView() {//界面的根布局root = View.inflate(mainActivity, R.layout.fragment_content_base_content, null);ib_menu = (ImageButton) root.findViewById(R.id.ib_base_content_menu);tv_title = (TextView) root.findViewById(R.id.tv_base_content_title);fl_content = (FrameLayout) root.findViewById(R.id.fl_base_content_tag);ib_listOrGrid = (ImageButton) root.findViewById(R.id.ib_base_content_listorgrid);}public void initEvent(){//给菜单按钮添加点击事件ib_menu.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//打开或者关闭左侧菜单mainActivity.getSlidingMenu().toggle();//左侧菜单的开关}});}/** * 此方法在该页面数据显示的时候再调用 */public void initData(){}public View getRoot(){return root;}}
当子类继承父类是 直接在initview()中修改控件的属性。
重写事件和数据的方法即可!
采用上面方式抽取时要注意 initdata 的调用 大多数 会在从 结合取出之前先行初始化,例如从构造函数中传递 一个集合,下面可能会用到 ,所以设置了空引用。
这是 初始化可以避免引用为空!!
普通定义界面抽取类:
当布局完全不同,完全自定义,甚至后面还是需要自定义布局模块的情况下,可以采用下面这种基类抽取方式:
public abstract class BaseCenterPaper { private View root ; MainActivity mainActivity; public BaseCenterPaper(Context context) { this.mainActivity= (MainActivity)context; this.root=initView(); initEvent(); } public abstract View initView(); public void initData(){ } public void initEvent(){ } public View getRoot() { return root; }}和上面相比唯一不同的就是子类不可以获取到基类的控件了。 因为子类有自己的布局
而 所需要的数据 可以在构造函数中进行传递。 然后将数据初始化给所继承的子类 !取出这个实例时提前调用initdata方法
接口:
接口;里面只有抽象方法;更彻底的抽取
接口:(不能创建实例,但可以作为,引用类型)
接口只能用public 或者默认修饰符修饰。
在接口中常量默认的修饰符是public static final
当接口作为引用类型引用,接口的实现类时,体现出接口的多态性!
eg: interface Product{ int getProduceLine();}class Printer implent Product{ int getProduceLine(){ syso.printf("line") }}class client{ public void main (String[] args){ Product p=new Printer(); p.getProduceLine(); }}
这里将多态的第1个必要条件,必须要有继承替换成了,实现接口。
简单的工厂模式:
面向接口编程:
实现低耦合,高内聚的一种编程方法
简单的工厂模式(情景A使用B对象,为了减少A对象对B对象的耦合,和B对象的替换,不采用组合方式而是采用工厂模式):
思路:
B对象即被使用的对象是一个接口。将需要使用的对象B,放在使用者构造函数中,并在内部对其使用。
当A对象需要使用B对象时,通过工厂产生一个接口放入B对象中。由于接口的标准是相同的,
替换B对象只需要C对象实现接口并在工厂中返回C对象即可,A的内部不用进行任何改变
eg:A为电脑 B为打印机 C为另一种打印机interface Output { public void output();} 因为接口的存在使得Computer使用打印机的方式完全透明(因为方法规范)。class Computer { private Output o; public computer(Output output) { this.output=output; } public void print(){ o.output();}} class Aoutput implentment Output(){ public output(){ syso.printf("a的打印方式"); } }class Factory{ getOutput() { return new Aoutput();//如需替换A则只需要在工厂返回时替换A对象为C对象即可 } public void main(String[] args) { Factory factory=new Factory(); Computer c=new computer(factory.getOutput()); c.output(); }}
0 0
- 抽象类与接口及简单的工厂模式
- 简单的工厂模式+一个抽象接口
- 简单工厂,工厂, 抽象工厂模式的学习与比较
- 简单工厂模式 与 抽象工厂模式
- 设计模式(4)-抽象工厂模式及抽象工厂与工厂模式的区别
- 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较
- 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别
- Android总结
- 最新县及县以上行政区划代码 的数据进行分割 对应的成一级二级 然后对写进数据库就容易了
- 开源软件架构-GDB
- 专题四1011
- mysql的主、从、dump数据库关系
- 抽象类与接口及简单的工厂模式
- svn常见问题,报错,命令
- C++类的构造函数与析构函数
- Spring创建对象的方式3种方式
- android的support包有什么?
- 通俗讲解:缓存、缓存算法和缓存框架
- (Leetcode)37. Sudoku Solver
- C++编写线程池
- 318. Maximum Product of Word Lengths