- 浏览: 25640 次
- 性别:
- 来自: 上海
文章分类
定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到其子类。
工厂方法模式的解决思路就是不解决,采用无为而治的方式。
public class ExportA implements ExportApi {
public boolean export(String data) {
System.out.println("ExportA" + data);
return true;
}
}
public class ExportB implements ExportApi {
public boolean export(String data) {
System.out.println("ExportB" + data);
return true;
}
}
public abstract class ExportOperation {
protected abstract ExprotApi factoryMethod();
public boolean export(String data) {
ExportApi api = factoryMethod();
return api.export(data);
}
}
public class ExportOperateA extends ExportOperation {
protected ExprotApi factoryMethod() {
return new ExportA();
}
}
public class ExportOperateB extends ExportOperation {
protected ExprotApi factoryMethod() {
return new ExportB();
}
}
在客户端可以用下面代码:
ExportOperation operate = new ExportOperateB();
operate.export("data");
工厂方法模式与IoC/DI
参与者:三个参与者,一个是某个对象,一个是IoC/DI的容器,还有一个是某个对象的外部资源。
谁依赖谁:某个对象依赖于IoC/DI容器
为什么需要依赖:对象需要IoC/DI容器来提供对象需要的外部资源。
谁注入谁:IoC/DI容器注入某个对象
到底注入什么:注入某个对象需要的外部资源
谁控制谁:IoC/DI容器来控制对象。
控制什么:控制对象实例的创建。
依赖注入是从应用程序的角度描述:应用程序依赖容器创建并注入它所需要的外部资源
控制反转是从容器的角度去描述:容器控制应用程序,由容器反向地向应用程序注入其所需要的资源。
参数化工厂方法:通过给工厂方法传递参数,让工厂方法根据参数的不同来创建不同的产品对象。只要ExportOperate类继承ExportOperation ,根据参数实例化ExportApi 。
工厂方法模式很好地体现了“依赖倒置”原则。依赖倒置原则告诉我们要依赖抽象,不用依赖于具体类。
工厂方法模式的解决思路就是不解决,采用无为而治的方式。
public class ExportA implements ExportApi {
public boolean export(String data) {
System.out.println("ExportA" + data);
return true;
}
}
public class ExportB implements ExportApi {
public boolean export(String data) {
System.out.println("ExportB" + data);
return true;
}
}
public abstract class ExportOperation {
protected abstract ExprotApi factoryMethod();
public boolean export(String data) {
ExportApi api = factoryMethod();
return api.export(data);
}
}
public class ExportOperateA extends ExportOperation {
protected ExprotApi factoryMethod() {
return new ExportA();
}
}
public class ExportOperateB extends ExportOperation {
protected ExprotApi factoryMethod() {
return new ExportB();
}
}
在客户端可以用下面代码:
ExportOperation operate = new ExportOperateB();
operate.export("data");
工厂方法模式与IoC/DI
参与者:三个参与者,一个是某个对象,一个是IoC/DI的容器,还有一个是某个对象的外部资源。
谁依赖谁:某个对象依赖于IoC/DI容器
为什么需要依赖:对象需要IoC/DI容器来提供对象需要的外部资源。
谁注入谁:IoC/DI容器注入某个对象
到底注入什么:注入某个对象需要的外部资源
谁控制谁:IoC/DI容器来控制对象。
控制什么:控制对象实例的创建。
依赖注入是从应用程序的角度描述:应用程序依赖容器创建并注入它所需要的外部资源
控制反转是从容器的角度去描述:容器控制应用程序,由容器反向地向应用程序注入其所需要的资源。
参数化工厂方法:通过给工厂方法传递参数,让工厂方法根据参数的不同来创建不同的产品对象。只要ExportOperate类继承ExportOperation ,根据参数实例化ExportApi 。
工厂方法模式很好地体现了“依赖倒置”原则。依赖倒置原则告诉我们要依赖抽象,不用依赖于具体类。
发表评论
-
访问者模式Visitor预留通路,回调实现
2014-03-13 16:55 379表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各 ... -
桥接模式Bridge分离抽象和实现
2014-03-13 16:55 491将抽象部分与它的实现部分分离,使它们都可以独立地变化。 桥接 ... -
职责链模式Chain of Responsibility分离职责,动态组合
2014-03-12 17:25 341使多个对象都有机会处 ... -
装饰模式Decorator动态组合
2014-03-12 17:00 277动态地给一个对象添加 ... -
解释器模式Interpreters分离实现,解释执行
2014-03-12 16:27 295给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解 ... -
享元模式Flyweight分离与共享
2014-03-12 13:20 301运用共享技术有效地支持大量细粒度的对象。 安全实体:就是被系 ... -
备忘录模式Memento保存和回复内部状态
2014-03-11 17:47 433在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外 ... -
状态模式State根据状态来分离和选择行为
2014-03-11 17:20 399允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改 ... -
策略模式Strategy分离算法,选择实现
2014-03-11 15:26 417迪米特法则:LoD,最少知识原则。 如果两个类不必彼此直接通信 ... -
模板方法模式Templete Method 固定算法骨架
2014-03-11 11:15 537定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法 ... -
组合模式Composite统一叶子对象和组合对象
2014-03-07 18:18 308将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使 ... -
迭代器模式Iterator 控制访问聚合对象中的元素
2014-03-07 17:57 410提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该 ... -
命令模式Command 封装请求
2014-03-07 16:26 380将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数 ... -
观察者模式Observer订阅模式-触发联动
2014-03-07 11:19 383定义对象间的一种一对 ... -
代理模式Proxy 为别人做嫁衣(控制对象访问)
2014-03-06 00:39 331为其他对象提供一种代理以控罪对这个对象的访问。 代理大致被分为 ... -
中介者模式Mediator 封装交互
2014-03-06 00:19 370用一个中介对象来封装 ... -
原型模式Prototype 克隆生成对象
2014-03-06 00:19 566用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 ... -
生成器模式Builder 分离整体构建算法和部件构造
2014-03-06 00:19 307将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建 ... -
抽象工厂模式 Abstract Factory 选择产品簇的实现
2014-03-06 00:20 417工厂方法模式或简单工 ... -
单例模式Singleton某个类只需要一个类实例
2014-03-05 16:46 426保证一个类只有一个实例,并提供一个访问它的全局访问点。 懒汉 ...
相关推荐
在工厂方法模式中,一个工厂类负责创建对象,而具体的创建过程被延迟到了子类中,使得子类可以在不修改原有代码的基础上决定创建哪种类型的对象。 首先,我们来看这个模式的核心组成部分: 1. **产品接口(Product...
在实际开发中,工厂方法模式常用于框架设计和数据库驱动等场景,例如ORM框架(如Hibernate)中,不同的数据库可能需要不同的连接策略,这可以通过实现不同的工厂方法来实现。另外,在多线程编程中,工厂方法也常用来...
工厂方法使一个类的实例化延迟到其子类。这种模式将类的创建过程封装起来,使得系统在不修改原有代码的情况下,可以通过更换不同的子类来创建不同的对象,实现了代码的解耦和扩展性。 ### 二、工厂方法模式的结构 ...
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪一个具体类。这样,客户端代码就不需要知道具体的类是什么,只需通过工厂接口获取对象。 工厂...
工厂方法模式是一种将对象的创建过程延迟到子类中实现的策略。它定义了一个创建对象的接口,但让子类决定实例化哪一个类。在工厂方法模式中,工厂角色(Factory)不再直接创建产品,而是由具体工厂(Concrete ...
### Factory Method 工厂方法模式(创建型模式) #### 概述 在软件工程领域,设计模式是一种在特定上下文中解决常见问题的通用方案。Factory Method(工厂方法)模式是GoF(Gang of Four)设计模式之一,属于创建型...
在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化(创建)哪一个类。 理解: 我们知道兵工厂可以...
这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实体化哪一个类。 工厂方法模式的结构: * 抽象工厂(Creator):是工厂方法模式的核心,负责定义创建抽象产品对象的工厂方法。 * 具体...
总的来说,工厂方法模式在C#中的应用广泛,尤其是在需要灵活地创建不同类型对象的场景下,它提供了更好的设计选择,有助于实现松耦合和高内聚的系统。通过学习和掌握工厂方法模式,开发者能够更好地设计和实现面向...
工厂方法模式(Factory Method Pattern)是一种常用的面向对象设计模式,属于创建型模式之一。它提供了一种创建对象的最佳方式。在工厂方法模式中,我们定义了一个用于创建对象的接口,但让子类决定实例化哪一个类。...
工厂方法模式(Factory Method Pattern)是设计模式中的创建型模式之一,它定义了一个创建对象的接口,但允许子类决定实例化哪一个类。这个模式使类的实例化延迟到了子类,也就是所谓的“多态性工厂”。在Java中,...
这样,工厂方法将实例化对象的过程延迟到了子类,实现了对具体类的解耦。在Java或其他面向对象语言中,通常表现为一个抽象类或接口定义了一个工厂方法,而各个具体的子类重写这个方法来创建对应的实例。这种模式的一...
在工厂方法模式中,一个类的实例化延迟到了子类,这样做的好处是每个子类可以决定实例化哪一个类。这种类型的设计模式属于类创建型模式。 在面向对象编程中,我们通常使用new关键字来创建对象,但这样会将对象的...
在这个模式中,一个工厂类负责创建对象,而具体的创建过程被延迟到子类中实现。这种模式的关键在于封装了对象的创建过程,并允许在运行时动态地决定创建哪个类的实例。 在Java编程中,工厂方法模式通常通过以下步骤...
在压缩包中的`FactoryMethod`文件很可能包含了示例代码,这些代码演示了如何在实际的Qt项目中运用工厂方法模式,例如定义工厂类、产品类以及它们之间的关系,以及如何在主程序中调用这些工厂来创建和使用对象。...
工厂方法模式提供了一种封装对象创建过程的方法,使得具体的创建过程延迟到子类中进行,从而实现了类的抽象化与具体实现的分离,提高了代码的可扩展性和可维护性。 ### 标题解析: “设计模式之工厂方法模式”表明...
工厂方法模式(Factory Method Pattern)是面向对象设计模式的一种,它在实际开发中有着广泛的应用。本项目通过工厂方法模式重构简易计算器,旨在展示这种模式在实现基本计算功能时的优势。 首先,我们要理解工厂...
* 当系统需要提供给用户某个类的子类的实例时,工厂方法模式可以将对象的实例化延迟到子类,使得系统更加灵活和可扩展。 * 当系统需要让用户代码和某个子类不形成耦合时,工厂方法模式可以提供给用户某个类的子类的...
工厂方法模式的核心思想是定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。工厂方法让类的实例化推迟到子类。这种模式将一个类的实例化延迟到了子类中,使得子类可以决定实例化什么样的对象。 ...