1.定义:工厂方法模式就是定义一个用于创建对象的接口,让子类决定实例化哪个类。

2.看代码:

产品抽象类

public abstract class Product {
/**
* 产品类抽象方法
*/
public abstract void method(); }

具体产品A

public class ProductA  extends Product{
private static final String TAG = "ProductA";
@Override
public void method() {
Log.i(TAG, "method: "+"产品A");
}
}

具体产品B

public class ProductB extends Product {
private static final String TAG = "ProductB"; @Override
public void method() {
Log.i(TAG, "method: "+"产品B");
}
}

抽象工厂类

/**
* 抽象工厂
*/
public abstract class Factory { public abstract Product createProduct();
}

具体工厂类

public class ConcreteFactory extends Factory {
@Override
public Product createProduct() {
return new ProductA();
}
}

实现

        Factory factory=new ConcreteFactory();
Product a=factory.createProduct();
a.method();

其主要为:

<1>抽象工厂,为工厂模式的核心

<2>具体工厂,实现具体的逻辑功能

<3>抽象产品,是工厂模式创建的产品的父类

<4>具体产品,实现抽象产品的某个具体对象

以上的方法如果需要得到ProductB的实例,可以创建productB的实例工厂。也可以在工厂的方法中传入Class类决定是哪一个产品类。

抽象工厂类

/**
* 抽象工厂
* 具体生产什么产品有子类实现
* @param tClass 产品对象类型
*
*/ public abstract class Factory { public abstract <T extends Product> T CreateProduct(Class<T> tClass); }

具体的工厂类,通过反射获取类的实例

public class ConcreteFactory extends Factory {
@Override
public <T extends Product> T CreateProduct(Class<T> tClass) {
Product product=null;
try {
product= (Product) Class.forName(tClass.getName()).newInstance(); }catch (Exception e){ }
return (T)product;
}
}

实现:

            Factory factory=new ConcreteFactory();
Product product=factory.CreateProduct(ProductB.class);
product.method();

Android设计模式——工厂方法模式的更多相关文章

  1. 4. 星际争霸之php设计模式--工厂方法模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. C++设计模式——工厂方法模式

    本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.» 本文链接:http://www.jellythink.com/arch ...

  3. JAVA设计模式--工厂方法模式

    工厂方法设计模式 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.具体工厂角色:它含有和具体业务逻辑有关 ...

  4. 深入浅出设计模式——工厂方法模式(Factory Method)

    介绍在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计模式的创建型设计模式.它解决的仍然是软件设计中与创建对象有关的问题.它可以更好的处理客户的需求变化. 引入我 ...

  5. 设计模式--工厂方法模式(Factory method pattern)及应用

    面向对象的好处: 通过封装,继承,多态把程序的耦合度降低. 用设计模式可以使程序更加灵活,容易修改,且易于复用. 1. 工厂方法模式 Define an interface for creating ...

  6. 我的Java设计模式-工厂方法模式

    女朋友dodo闹脾气,气势汹汹的说"我要吃雪糕".笔者心里啊乐滋滋的,一支雪糕就能哄回来,不亦乐乎?! 但是,雪糕买回来了,她竟然说"不想吃雪糕了,突然想吃披萨" ...

  7. 设计模式 — 工厂方法模式(Factory Method)

    在开发系统中,经常会碰到一个问题.现在需要实现的一些功能,但是这个功能模块以后一定是需要扩展的,那么现在开发中就不仅要实现现在的功能,还要考虑以后的扩展.那么为了系统的健壮,扩展就要遵循开闭原则(简单 ...

  8. C#设计模式--工厂方法模式

    0.C#设计模式-简单工厂模式 设计模式: 工厂方法模式(Factory Method Pattern) 介绍:简单工厂模式是要在工厂类中通过数据来做个决策,在工厂类中的多个类中实例化出来其中一个要用 ...

  9. Java设计模式—工厂方法模式&抽象工厂模式

    工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...

随机推荐

  1. WCF - NetCtP 双工错误列表

    1. 在服务 Transfer 实现的协定列表中找不到协定名称 "IMetadataExchange" 将 ServiceMetadataBehavior 添加到配置文件或直接添加 ...

  2. vue1 到 vue2 v-el变成ref

    vue1的写法 div class="menu-wrapper" v-el="menu-wrapper"> <ul class="menu ...

  3. Angular ui-router的常用配置参数详解

    一.$urlRouterProvider服务 $urlRouterProvidfer负责监听$location,当$location变化时,$urlRouterProvider将在规则列表中查找匹配的 ...

  4. IE兼容opacity

    filter:alpha(opacity=80); opacity: 0.57; /* Firefox, Safari(WebKit), Opera) filter: "alpha(opac ...

  5. sql server 的 isnull 函数

  6. java 常用API 包装

    package com.oracel.demo01; public class Baozhuang { //将字符串转成基本数据类型 public static void main(String[] ...

  7. [POI2007]MEG-Megalopolis 树状数组 + dfs序前缀和 好题

    #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const ...

  8. Brain Network (hard) CodeForces - 690C 简单倍增 + 一些有趣的推导

    Code: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ...

  9. win10更新后程序路径盘符变成*星号解决方法

    发现这个问题是当我在命令行里输入java -version时提示 找不到*:\Program Files\Java...之类的 怎么好好的D:\Program Files\Java变成了*:\Prog ...

  10. 将JavaBean对象/List或Set或Map对象转成JSON方式

    一.通过Struts2插件包(即使用Struts框架)自动生成JSON文本 二.使用第三方工具,将JavaBean对象/List或Set或Map对象转成JSON  准备导入第三方jar包: >c ...