什么情况下使用抽象工厂模式?
a).一个系统不应该依赖于产品类的实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的;
b).这个系统的产品有多于一个产品族,而系统只消费其中某一族的产品;(这是抽象工厂模式的原始用意,某一族的产品就类似于下面例子中,
北方的产品属于一个产品族,热带的产品属于一个产品族)
c).系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现;
水果接口
package com.wlh.AbstractFactory;
/**
* 水果
* @author Administrator
*
*/
public interface Fruit {
}
蔬菜接口
package com.wlh.AbstractFactory;
/**
* 蔬菜
* @author Administrator
*
*/
public interface Viggie {
}
园丁接口(也就是工厂)
package com.wlh.AbstractFactory;
/**
*园丁(也就是工厂)
*/
public interface Gardener {
public Fruit createFruit();
public Viggie createViggie();
}
北方水果
package com.wlh.AbstractFactory.impl;
import com.wlh.AbstractFactory.Fruit;
public class NorthFruit implements Fruit {
private String name;
public NorthFruit (String name){
this.name=name;
System.out.println("生产出:...."+this.name);
}
}
北方蔬菜
package com.wlh.AbstractFactory.impl;
import com.wlh.AbstractFactory.Viggie;
public class NorthViggie implements Viggie {
private String name;
public NorthViggie(String name) {
this.name=name;
System.out.println("生产出:...."+this.name);
}
}
热带水果:
package com.wlh.AbstractFactory.impl;
import com.wlh.AbstractFactory.Fruit;
public class TropicalFruit implements Fruit {
private String name;
public TropicalFruit(String name){
this.name=name;
System.out.println("生产出:...."+this.name);
}
}
热带蔬菜
package com.wlh.AbstractFactory.impl;
import com.wlh.AbstractFactory.Viggie;
public class TropicalViggie implements Viggie {
private String name;
public TropicalViggie(String name){
this.name=name;
System.out.println("生产出:...."+this.name);
}
}
北方园丁(北方工厂)只负责生产北方产品
package com.wlh.AbstractFactory.impl;
import com.wlh.AbstractFactory.Fruit;
import com.wlh.AbstractFactory.Gardener;
import com.wlh.AbstractFactory.Viggie;
public class NorthGardener implements Gardener {
/**
* 种植北方水果
*/
public Fruit createFruit(){
return new NorthFruit("北方水果");
}
/**
* 种植北方蔬菜
*/
public Viggie createViggie(){
return new NorthViggie("北方蔬菜");
}
}
热带园丁(热带工厂)只负责生产热带产品
package com.wlh.AbstractFactory.impl;
import com.wlh.AbstractFactory.Fruit;
import com.wlh.AbstractFactory.Gardener;
import com.wlh.AbstractFactory.Viggie;
public class TropicalGardener implements Gardener{
/**
* 种植热带水果
*/
public Fruit createFruit(){
return new TropicalFruit("热带水果") ;
}
/**
* 种植热带蔬菜
*/
public Viggie createViggie(){
return new TropicalViggie("热带蔬菜");
}
}
客户端调用
package com.wlh.AbstractFactory.test;
import com.wlh.AbstractFactory.impl.NorthGardener;
import com.wlh.AbstractFactory.impl.TropicalGardener;
public class CreatTest {
/**
* @param args
*/
public static void main(String[] args) {
new TropicalGardener().createFruit();
new TropicalGardener().createViggie();
new NorthGardener().createFruit();
new NorthGardener().createViggie();
}
}
输出:
生产出:....热带水果
生产出:....热带蔬菜
生产出:....北方水果
生产出:....北方蔬菜
分享到:
相关推荐
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/1032977
博客 走进设计模式之抽象工厂(Abstract Factory) 对应代码
C#设计模式之抽象工厂(abstract factory)模式示例源代码
设计模式抽象工厂模式(AbstractFactory)源代码
3、抽象工厂模式(Abstract Factory Pattern) 用意:一个工厂生产一系列产品
抽象工厂模式(Abstract Factory Pattern) 引入: 在前面介绍的两个创建型模式里面,我们解决的都是有关"new"的问题,用它们来避免显式指定类创建对象。我写的也非常简单易懂,相信看过的朋友们都应该对简单工厂...
设计模式C++学习之抽象工厂模式(AbstractFactory)
java之 抽象工厂模式(abstract factory) 之水果类和蔬菜类 (香蕉、梨、黄瓜、大蒜),北方市场,南方市场。。
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。
在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在着更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象的创建方法(new),...这就是我们要说的抽象工厂模式。
设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)
设计模式,AbstractFactory,抽象工厂模式
NULL 博文链接:https://conkeyn.iteye.com/blog/1245113
NULL 博文链接:https://zhouhaitao.iteye.com/blog/1003684
生产餐具和相应食物的工厂,有两个车间,其中一个车间用以生产餐具,一个车间用以生产相应的食物。 每个具体工厂生产出来的具体产品根据不同工厂的不同各不相同,但是客户使用产品的方法是一致的。比如客户在得到...
抽象工厂模式可以实现不同数据库之间的无缝移植。 该项目是在三层架构的基础上改进的。希望对初学者有帮助。
Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...
6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、...
还是一个很简单的例子 博文链接:https://schnauzer.iteye.com/blog/111891
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) 体验课程