`
176915785
  • 浏览: 33143 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式--抽象工厂

阅读更多
  接着昨天的工厂模式接着说说抽象工厂,当你拥有多个抽象对象的时候。你的工厂模式估计就不给力了。这时候你就该考虑抽象工厂了。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象
  不说了上代码。
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();
	}
}

这里的代码并没有用抽象的类,而是使用的接口。
0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics