接着昨天的工厂模式接着说说抽象工厂,当你拥有多个抽象对象的时候。你的工厂模式估计就不给力了。这时候你就该考虑抽象工厂了。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象
不说了上代码。
package AbstractFactory;
public interface AbstractFactory {
public AbstractProduct createConcreteProductA();
public AbstractProduct createConcreteProductB();
}
package AbstractFactory;
public interface AbstractProduct {
public void doSomething();
}
package AbstractFactory;
public class ConcreteFactory implements AbstractFactory {
public ConcreteFactory() {
super();
}
public AbstractProduct createConcreteProductA() {
return new ConcreteProductA();
}
public AbstractProduct createConcreteProductB() {
return new ConcreteProductB();
}
}
package AbstractFactory;
public class ConcreteProductA implements AbstractProduct {
public ConcreteProductA() {
super();
}
public void doSomething() {
System.out.println("A产品");
}
}
package AbstractFactory;
public class ConcreteProductB implements AbstractProduct {
public ConcreteProductB() {
super();
}
public void doSomething() {
System.out.println("B产品");
}
}
package AbstractFactory;
public class ClientA {
private final AbstractFactory fFactory;
public ClientA(AbstractFactory factory) {
super();
fFactory = factory;
}
public void useConcreteProductA() {
final AbstractProduct product = fFactory.createConcreteProductA();
product.doSomething();
}
public void useConcreteProductB() {
final AbstractProduct product = fFactory.createConcreteProductB();
product.doSomething();
}
}
package AbstractFactory;
public class ClientB {
private final AbstractFactory fFactory;
public ClientB(AbstractFactory factory) {
super();
fFactory = factory;
}
public void useConcreteProductA() {
final AbstractProduct product = fFactory.createConcreteProductA();
product.doSomething();
}
public void useConcreteProductB() {
final AbstractProduct product = fFactory.createConcreteProductB();
product.doSomething();
}
}
package AbstractFactory;
public class AbstractFactoryTest {
public static void main(String[] args) {
ClientA clientA = new ClientA(new ConcreteFactory());
clientA.useConcreteProductA();
clientA.useConcreteProductB();
ClientB clientB = new ClientB(new ConcreteFactory());
clientB.useConcreteProductA();
clientB.useConcreteProductB();
}
}
这里的代码并没有用抽象的类,而是使用的接口。
分享到:
相关推荐
设计模式--抽象工厂模式实现多数据库连接 设计模式,.net设计模式,抽象工厂
创建型设计模式----抽象工厂模式
java设计模式----抽象工厂模式,简单工厂模式代码 代码内部
设计模式专题之(三)抽象工厂模式---设计模式抽象工厂模式示例代码(python--c++)
设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)
在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。怎么应对这种变化?怎么绕过常规的对象的创建方法(new)...这就是我们要说的抽象工厂模式。
设计模式-抽象工厂模式(讲解及其实现代码)
设计模式 - 抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际...
NULL 博文链接:https://koda.iteye.com/blog/323289
java设计模式-创建者模式-简单工厂模式。详细的讲解了什么是抽象工厂模式及应用场景和应用场景的代码事例。及各工厂模式的区别。
设计模式-抽象工厂模式javademo java小程序
抽象工厂设计模式抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式
c++设计模式-创建型-抽象工厂方法-最简单源码-qt工程
java常用设计模式-抽象工厂模式
NULL 博文链接:https://jijun87120681.iteye.com/blog/1225384
java,设计模式中的一种,抽象工厂设计模式。
能让你最快上手,最容易理解抽象工厂模式,并能在实际中运用
抽象工厂-设计模式-主要介绍怎么样创建抽象工厂并实现数据库创建