JAVA 设计模式工厂方法模式
来源:互联网 发布:java开发实战经典pdf 编辑:程序博客网 时间:2024/06/17 07:43
工厂方法模式的介绍
工厂方法模式,是创建性设计模式之一,工厂方法模式是一种结构简单的模式,其在我们开发时应用很广泛
工厂方法模式的定义
定义一个用于创建对象的接口,让子类决定实例化那个类
工厂方法模式的使用场景
在任何需要生成复杂对象的地方,都可以使用工厂方法模式,复杂对象适合使用工厂模式,用new就可以完成创建的对象无需使用工厂模式
工厂方法模式的UML图
下面我们用具体的例子来看
//抽象产品类public abstract class Product { /** *产品类的抽象方法 * 由具体的产品实现 */ public abstract String method();}
public class ProductA extends Product{ @Override public String method() { return "我是产品A"; }}
public class ProductB extends Product { @Override public String method() { return "我是产品B"; }}
public abstract class Factory { /** * 抽象工厂方法 * 具体生产什么由子类去实现 * @return 具体的产品 */ public abstract Product createProduct();}
public class ProductFactory extends Factory { @Override public Product createProduct() { return new ProductB(); //return new ProductA(); }}
public class FactoryActivity extends BaseActivity { private TextView mTextView; @Override public int setMainView() { return R.layout.activity_factory; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mTextView = (TextView) findViewById(R.id.factory_text); ProductFactory productFactory = new ProductFactory(); Product product = productFactory.createProduct(); mTextView.setText(product.method()); }}
这里的几个角色都很简单,主要分为四大模块,一个是抽象工厂,其为工厂方法模式的核心,二是具体工厂,其实现了具体的业务逻辑,三是抽象产品,是工厂方法模式创建对象的父类,四是具体产品,为实现抽象产品的某个具体产品的对象
上述代码如果想要切换产品的话需要
public class ProductFactory extends Factory { @Override public Product createProduct() { return new ProductB(); //return new ProductA(); }}
这种方式比较常见,需要哪个产品就生产哪一个,有时候也可以利用反射跟简洁的来生产具体产品对象,此时需要传入一个Class来决定是哪一个产品类,代码如下
public class ProductFactory extends Factory { @Override public <T extends Product> T createProduct1(Class<T> cls) { Product p= null; try { p = (Product) Class.forName(cls.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return (T) p; }}
调用
public class FactoryActivity extends BaseActivity { private TextView mTextView; @Override public int setMainView() { return R.layout.activity_factory; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mTextView = (TextView) findViewById(R.id.factory_text); ProductA productA = new ProductA(); ProductFactory productFactory1 = new ProductFactory(); ProductA product1 = productFactory1.createProduct1(productA.getClass()); mTextView.setText(product1.method()); }}
除了上面两种之外还可以为每个具体的产品,定义一个具体的工厂,这样的成为多工厂模式,这里就不过多的叙述了
总结:
总的来说,工厂方法模式是一个很好的实际模式,在本文多处地方都有对其有点的总结,但是缺点也是难以避免的,每次我们为工厂方法模式添加新的产品时就要编写一个新的产品类,同时还要引入抽象层,这必然导致类结构的复杂化,所以说,在某些情况比较简单时,是否需要使用工厂模式,需要权衡利弊。
阅读全文
0 0
- java设计模式--工厂方法设计模式
- Java工厂方法模式设计
- Java工厂方法模式设计
- java工厂方法设计模式
- java设计模式-工厂方法
- JAVA-工厂方法设计模式
- 【java】工厂方法设计模式
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- java设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- Java设计模式--工厂模式(简单工厂+工厂方法)
- Java设计模式-工厂模式(简单工厂+工厂方法)
- 使用最新版本的androidjunitrunner运行测试用例报:xxx/R.txt (系统找不到指定的文件。)的解决方法
- 同步与串口、USART与UART、单工半双工与全双工
- 图像处理(用计算机对图像进行处理的技术)
- input 显示提示的几种方式。
- Java多线程-完成Android开发中的某些需求
- JAVA 设计模式工厂方法模式
- 安装Microsoft Visual C++ 2010 x64 Redistributable 报错
- Fastdfs集群安装和配置
- 外观模式
- MySQL插入表格数据的时候出现1265错误
- Excel在统计分析中的应用—第六章—抽样与抽样分布-Part3(分层抽样)
- 代码重构
- Linux cp 命令详解
- VUE Created\什么是Virtual Dom