Tag: 工厂方法

Factory方法更适合图书馆的框架和抽象工具吗?

Abstract Factory和Factory方法模式都是创建设计模式,它解决了不同场景下的对象创建问题。 根据GOF 工厂方法模式 定义用于创建对象的接口,但让子类决定实例化哪个类。 Factory方法允许类将实例化延迟到子类。 我的理解: 客户端的动机是获得一个存在于基础工厂类中的方法得到执行,这取决于现在不知道具体类的对象(在这种情况下,无论是在向客户提供软件期间,它都将是定义,或者客户自己编写具体实现,最有可能是框架)。 未知(或可能更改)的产品提供了一种抽象类型:IProduct,并设置一个合同,以后在产品的任何实现中都必须实现此接口。 IProduct接口 package com.companyx; public interface IProduct { public void serve(); } 带有’a method’的工厂类需要执行 package com.companyx; public abstract class Factory { public abstract IProduct createProduct(); private void performCriticalJob(){ IProduct product = createProduct(); product.serve(); } public void executeJob(){ //some code performCriticalJob(); //some more code } } 一些具体的产品 package […]

使用静态工厂类生成GUI组件 – 如何以及在何处添加所需的侦听器?

我想使用工厂类和方法来生成GUI组件,但我不知道应该如何以及在哪个类中声明各种侦听器并将其添加到组件中。 如果我有一个简单的工厂类,如下面列出的那样,我应该在它返回到调用类之前向该按钮添加一个ActionListener。 如果答案为“是”,那么如何添加监听器? class GUIFactory { public static JButton getJButton() { JButton aButton = new JButton(); return aButton; } } 假设我想使用getJButton()方法向GUI添加5个按钮,我将如何编写ActionListener以便知道单击了哪个按钮? 或者应该在调用类中添加侦听器? JFrame gui = new JFrame(); gui.add(AppFactory.getJButton()); 我尝试了以下内容 gui.add(GUIFactory.getJButton().addActionListener(new guiButtonListener())); 并得到一个错误: 这里不允许使用“void”类型。

java参数化通用静态工厂

在Java中是否可以创建一个静态工厂方法/类,它使用接口作为参数化类型并返回给定接口的实现类? 虽然我对generics的了解有限,但这就是我想要做的: // define a base interface: public interface Tool { // nothing here, just the interface. } // define a parser tool: public interface Parser extends Tool { public ParseObject parse(InputStream is); } // define a converter tool: public interface Converter extends Tool { public ConvertObject convert(InputStream is, OutputStream os); } // define a […]

在以下示例中使用抽象工厂而不是工厂方法有什么好处?

在写这个问题之前,我读了以下参考文献: 工厂方法与抽象工厂 抽象工厂与工厂方法(范围) 抽象工厂,工厂方法,生成器 工厂,抽象工厂和工厂方法 抽象工厂模式与工厂方法的区别 我看到像我这样的很多人都难以“掌握”抽象工厂和工厂模式之间的具体差异。 我不熟悉设计模式,我遇到了这个例子http://www.oracle.com/technetwork/java/dataaccessobject-138824.html ,我正在努力深化这个主题。 通过比较,我看到3 DTO我们有: 1)抽象工厂 1个抽象类(有3个抽象方法和3个switch-cases); 持久化类型的3个工厂类(每个类有3种获取DTO DAO的方法) 3个接口和9个DAO。 2)工厂方法: 3个工厂类,每个接口一个(每个有3个开关盒); 可能我可以创建3个超类来扩展DAO类而不重复代码,例如连接到数据库的代码; 3个接口和9个DAO。 从代码数量的角度来看,我没有看到任何实质性的差异。 如果您需要添加新的持久性支持或新的接口/ DTO,则差异很小(并且是互补的)。 从客户的角度来看: 1)抽象工厂: public static final int PERSISTENCE_TYPE = DAOFactory.ORACLE; DAOFactory daoFactory = DAOFactory.getDAOFactory(PERSISTENCE_TYPE); CustomerDAO cDAO = daoFactory.getCustomerDAO(); AccountDAO aDAO = daoFactory.getAccountDAO(); OrderDAO oDAO = daoFactory.getOrderDAO(); 2)工厂方法: public static final int PERSISTENCE_TYPE = […]