- 浏览: 25620 次
- 性别:
- 来自: 上海
文章分类
工厂方法模式或简单工厂关注的是单个产品对象的创建,比如创建CPU的工厂方法,它就只关心如何创建CPU对象,而创建主板的工厂方法,就只关心如何创建主板对象。
public interface AbstractFactory{
public AbstractProductA createProductA();
public AbstractProductB createProductB();
}
public interface AbstractProductA {
}
public interface AbstractProductB {
}
public class ProductA1 implements AbstractProductA {
}
public class ProductA2 implements AbstractProductA {
}
public class ProductB1 implements AbstractProductB {
}
public class ProductB2 implements AbstractProductB {
}
public class ConcreteFactory1 implements AbstractFactory {
public AbstractProductA createProductA() {
return new ProductA1();
}
public AbstractProductB createProductB() {
return new ProductB1();
}
}
public class ConcreteFactory2 implements AbstractFactory {
public AbstractProductA createProductA() {
return new ProductA2();
}
public AbstractProductB createProductB() {
return new ProductB2();
}
}
客户端代码可以如下:
AbstractFactory af = new ConcreteFactory1();
af.createProductA();
af.createProductB();
AbstractFactory在java中通常实现成为接口,具体的实现是在实现类中。
AbstractFactory定义的创建创建产品的方法可以看出是工厂方法,而这些工厂方法的实现就延迟到了具体的工厂里面。也就是说使用工厂方法来实现抽象工厂。
可以改造为使用参数的抽象工厂。
DAO模式实现的时候采用工厂方法和抽象工厂。
使用抽象工厂实现DAO模式
public abstract class DAOFactory{
public abstract OrderMainDAO createOrderMainDAO();
public abstract OrderDetailDAO createOrderDetailDAO();
}
public interface OrderMainDAO {
public void saveOrderMain();
}
public interface OrderDetailDAO {
public void saveOrderDetail();
}
public class RdbMainDAOImpl implements OrderMainDAO {
public void saveOrderMain() {
System.out.println("now in RdbMainDAOImpl");
}
}
public class RdbDetailDAOImpl implements OrderDetailDAO {
public void saveOrderDetail() {
System.out.println("now in RdbDetailDAOImpl");
}
}
public class XmlMainDAOImpl implements OrderMainDAO {
public void saveOrderMain() {
System.out.println("now in XmlMainDAOImpl");
}
}
public class XmlDetailDAOImpl implements OrderDetailDAO {
public void saveOrderDetail() {
System.out.println("now in XmlDetailDAOImpl");
}
}
public class RdbDAOFactory extends DAOFactory {
public OrderMainlDAO createOrderMainDAO() {
return new RdbMainDAOImpl();
}
public OrderDetailDAO createOrderDetailDAO() {
return new RdbDetailDAOImpl();
}
}
public class XmlDAOImpl extends DAOFactory {
public OrderMainDAO createOrderMainDAO() {
return new XmlMainDAOImpl();
}
public OrderDetailDAO createOrderDetailDAO() {
return new XmlDetailDAOImpl();
}
}
客户端可以用下面的代码:
DAOFactory df = new RdbDAOFactory();
OrderMainDAO mainDAO = df.createOrderMainDAO();
OrderDetailDAO detailDAO = df.createOrderDetailDAO();
mainDAO.saveOrderMain();
detailDAO.saveOrderDetail();
抽象工厂优点:
分离接口和实现;使得切换产品簇变得容易
缺点:
不太容易扩展新的产品;容易造成类层次复杂
public interface AbstractFactory{
public AbstractProductA createProductA();
public AbstractProductB createProductB();
}
public interface AbstractProductA {
}
public interface AbstractProductB {
}
public class ProductA1 implements AbstractProductA {
}
public class ProductA2 implements AbstractProductA {
}
public class ProductB1 implements AbstractProductB {
}
public class ProductB2 implements AbstractProductB {
}
public class ConcreteFactory1 implements AbstractFactory {
public AbstractProductA createProductA() {
return new ProductA1();
}
public AbstractProductB createProductB() {
return new ProductB1();
}
}
public class ConcreteFactory2 implements AbstractFactory {
public AbstractProductA createProductA() {
return new ProductA2();
}
public AbstractProductB createProductB() {
return new ProductB2();
}
}
客户端代码可以如下:
AbstractFactory af = new ConcreteFactory1();
af.createProductA();
af.createProductB();
AbstractFactory在java中通常实现成为接口,具体的实现是在实现类中。
AbstractFactory定义的创建创建产品的方法可以看出是工厂方法,而这些工厂方法的实现就延迟到了具体的工厂里面。也就是说使用工厂方法来实现抽象工厂。
可以改造为使用参数的抽象工厂。
DAO模式实现的时候采用工厂方法和抽象工厂。
使用抽象工厂实现DAO模式
public abstract class DAOFactory{
public abstract OrderMainDAO createOrderMainDAO();
public abstract OrderDetailDAO createOrderDetailDAO();
}
public interface OrderMainDAO {
public void saveOrderMain();
}
public interface OrderDetailDAO {
public void saveOrderDetail();
}
public class RdbMainDAOImpl implements OrderMainDAO {
public void saveOrderMain() {
System.out.println("now in RdbMainDAOImpl");
}
}
public class RdbDetailDAOImpl implements OrderDetailDAO {
public void saveOrderDetail() {
System.out.println("now in RdbDetailDAOImpl");
}
}
public class XmlMainDAOImpl implements OrderMainDAO {
public void saveOrderMain() {
System.out.println("now in XmlMainDAOImpl");
}
}
public class XmlDetailDAOImpl implements OrderDetailDAO {
public void saveOrderDetail() {
System.out.println("now in XmlDetailDAOImpl");
}
}
public class RdbDAOFactory extends DAOFactory {
public OrderMainlDAO createOrderMainDAO() {
return new RdbMainDAOImpl();
}
public OrderDetailDAO createOrderDetailDAO() {
return new RdbDetailDAOImpl();
}
}
public class XmlDAOImpl extends DAOFactory {
public OrderMainDAO createOrderMainDAO() {
return new XmlMainDAOImpl();
}
public OrderDetailDAO createOrderDetailDAO() {
return new XmlDetailDAOImpl();
}
}
客户端可以用下面的代码:
DAOFactory df = new RdbDAOFactory();
OrderMainDAO mainDAO = df.createOrderMainDAO();
OrderDetailDAO detailDAO = df.createOrderDetailDAO();
mainDAO.saveOrderMain();
detailDAO.saveOrderDetail();
抽象工厂优点:
分离接口和实现;使得切换产品簇变得容易
缺点:
不太容易扩展新的产品;容易造成类层次复杂
发表评论
-
访问者模式Visitor预留通路,回调实现
2014-03-13 16:55 377表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各 ... -
桥接模式Bridge分离抽象和实现
2014-03-13 16:55 490将抽象部分与它的实现部分分离,使它们都可以独立地变化。 桥接 ... -
职责链模式Chain of Responsibility分离职责,动态组合
2014-03-12 17:25 341使多个对象都有机会处 ... -
装饰模式Decorator动态组合
2014-03-12 17:00 276动态地给一个对象添加 ... -
解释器模式Interpreters分离实现,解释执行
2014-03-12 16:27 294给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解 ... -
享元模式Flyweight分离与共享
2014-03-12 13:20 301运用共享技术有效地支持大量细粒度的对象。 安全实体:就是被系 ... -
备忘录模式Memento保存和回复内部状态
2014-03-11 17:47 432在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外 ... -
状态模式State根据状态来分离和选择行为
2014-03-11 17:20 398允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改 ... -
策略模式Strategy分离算法,选择实现
2014-03-11 15:26 416迪米特法则:LoD,最少知识原则。 如果两个类不必彼此直接通信 ... -
模板方法模式Templete Method 固定算法骨架
2014-03-11 11:15 536定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法 ... -
组合模式Composite统一叶子对象和组合对象
2014-03-07 18:18 306将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使 ... -
迭代器模式Iterator 控制访问聚合对象中的元素
2014-03-07 17:57 409提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该 ... -
命令模式Command 封装请求
2014-03-07 16:26 379将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数 ... -
观察者模式Observer订阅模式-触发联动
2014-03-07 11:19 382定义对象间的一种一对 ... -
代理模式Proxy 为别人做嫁衣(控制对象访问)
2014-03-06 00:39 330为其他对象提供一种代理以控罪对这个对象的访问。 代理大致被分为 ... -
中介者模式Mediator 封装交互
2014-03-06 00:19 370用一个中介对象来封装 ... -
原型模式Prototype 克隆生成对象
2014-03-06 00:19 565用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 ... -
生成器模式Builder 分离整体构建算法和部件构造
2014-03-06 00:19 306将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建 ... -
工厂方法模式Factory Method延迟到子类来选择实现
2014-03-05 18:12 950定义一个用于创建对象 ... -
单例模式Singleton某个类只需要一个类实例
2014-03-05 16:46 425保证一个类只有一个实例,并提供一个访问它的全局访问点。 懒汉 ...
相关推荐
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建对象集合的接口,而无需指定具体的产品类型。这种模式适用于当系统需要在不同平台或环境中创建一组相关或相互依赖的对象时,而这些...
1. **模式结构**:抽象工厂模式通常包括抽象工厂接口(AbstractFactory),具体工厂类(ConcreteFactory),抽象产品接口(Product)以及具体产品类(ConcreteProduct)。抽象工厂定义了创建产品的方法,而具体工厂...
抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建一系列相关或相互依赖对象的接口。这个模式使得客户端代码与具体产品的实现解耦,从而提高了系统的灵活性和...
在实际编程中,抽象工厂模式可以提高代码的灵活性,使得系统更易于添加新的产品族,同时也能隔离客户端代码与具体产品实现之间的耦合。然而,如果产品族的扩展过于频繁,可能会导致抽象工厂的实现变得复杂,增加了...
### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的简单工厂模式与工厂方法模式。这两种模式主要关注于解决对象创建过程中“new”操作的问题,使得创建...
1. 抽象工厂(Abstract Factory):这是模式的核心,定义了一组创建对象的接口,客户端通过这个接口请求创建所需的产品。这个接口不直接创建产品,而是将产品创建的职责委托给具体工厂。 2. 具体工厂(Concrete ...
在C#中实现抽象工厂模式(Abstract Factory Pattern)涉及定义一个抽象工厂接口,该接口声明用于创建抽象产品的方法。然后,为每个具体产品族实现一个具体工厂,这些工厂提供创建具体产品的实现。最后,客户端代码...
抽象工厂(Abstract Factory)设计模式是软件工程中一种重要的创建型设计模式,它提供了一种创建对象组的方式,这些对象属于同一族系并且彼此相关。这个模式的主要目标是定义一个接口,用于创建一族相关或相互依赖的...
1. **抽象工厂接口(Abstract Factory)**:定义了一系列产品的创建方法,例如`NWFactory`可能是这个抽象工厂的实现,它包含了创建人和动物的方法。 2. **具体工厂类(Concrete Factory)**:实现了抽象工厂接口,...
在这个例子中,`AbstractProductA`和`AbstractProductB`是抽象产品,`ConcreteProductA1/A2`和`ConcreteProductB1/B2`是具体产品,`AbstractFactory`是抽象工厂,`ConcreteFactory1/2`是具体工厂。客户端代码通过...
这个压缩包“C# 抽象工厂 AbstractFactory.rar”可能包含了一个关于如何在C#中实现抽象工厂模式的实例或教程。 抽象工厂模式是一种创建型设计模式,它提供了一种创建对象族的方式,而无需指定具体类。在C#中,这种...
设计模式抽象工厂模式(AbstractFactory)源代码
在给定的压缩包文件中,"AbstractFactory"可能包含了一些示例代码或者实现,用来解释抽象工厂模式的具体应用。这些代码可能包括抽象工厂接口、具体工厂类以及抽象产品和具体产品的定义。通过查看这些代码,我们可以...
- **具体工厂**:实现了抽象工厂接口,负责创建产品族中的产品实例。如`PcFactory`和`MacFactory`。 - **产品接口**:定义了一组产品接口,如`RAM`和`CPU`。 - **具体产品**:实现了产品接口,并提供了具体产品的...
1. 抽象工厂(Abstract Factory):定义一个创建对象的接口,但不直接实现它,而是由子类来具体实现。这个接口通常包含了一系列创建产品对象的方法。 2. 具体工厂(Concrete Factory):实现抽象工厂接口,提供具体...
4. **具体产品(Concrete Product)**:实现了抽象产品接口,是抽象工厂模式中的实际被创建的对象,属于同一个产品族。 在实际应用中,抽象工厂模式可以用于以下场景: - 当系统需要为多个产品族提供产品时,每个...
**抽象工厂模式(Abstract Factory Pattern)**是一种创建型设计模式,它提供了一种创建对象族的接口,而无需指定它们的具体类。这种模式是当一个系统需要根据不同的平台或者环境来创建一组相关或相互依赖的对象时,...
1. 抽象工厂(Abstract Factory):定义一个创建对象的接口,但不指定具体的产品实现,而是由具体的工厂类来实现。 2. 具体工厂(Concrete Factory):实现了抽象工厂接口,负责创建具体的产品对象。 3. 抽象产品...
通过抽象工厂模式,我们可以隔离具体产品的实现细节,并允许添加新的产品类型而无需修改现有代码。 在这个场景中,“水果类”和“蔬菜类”是产品,如“香蕉”、“梨”、“黄瓜”和“大蒜”,它们代表了不同的产品族...