深入浅出设计模式 ------ Abstract Factory(抽象工厂)
来源:互联网 发布:js中保留字的单词 编辑:程序博客网 时间:2024/06/06 20:48
一. 定义 提供一个创建一系列相关或相互依赖对象的接口, 而无需指定它们的具体类。
二. 结构
三. 参与者
Product (Fruit和Leaf两个抽象产物) : 抽象生产者接口;
TreeFruit(树上的水果)、 TreeLeaf(树上的叶子)、 GroundFruit(地上的水果)、 GroundLeaf(地上的叶子) : 实际的自然产物;
NatureFactory: 抽象的自然制造工厂, 用于生产水果和叶子;
TreeFactory、 LeafFactory : 实际的自然制造工厂, 用于生产树上或地上的水果和叶子。
四. 适用性
- 一个系统独立(解耦)于它的产品的创建、 组合和表示时
- 一个系统要由多个它的产品的创建、组合(以上的自然界需要水果和叶子的组合)和表示时
- 强调一系列相关的产品对象的设计以便进行联合使用时
- 提供一个产品库, 而只想显示接口(面向接口编程)而不是实现时。
五. 具体实现
抽象工厂: 制造大自然中的叶子和水果
package com.wenniuwuren.abstractfactory;/** * 抽象工厂: 制造大自然中的叶子和水果 * @author wenniuwuren * */public interface NatureFactory {public Fruit createFruit();public Leaf createLeaf();}
package com.wenniuwuren.abstractfactory;/** * 工厂实现类: 制造地面上的叶子和水果 * @author wenniuwuren * */public class GroundFactory implements NatureFactory {@Overridepublic Fruit createFruit() {return new GroundFruit();}@Overridepublic Leaf createLeaf() {return new GroundLeaf();}}
package com.wenniuwuren.abstractfactory;/** * 工厂实现类:制造树上的水果和叶子 * @author wenniuwuren * */public class TreeFactory implements NatureFactory {@Overridepublic Fruit createFruit() {return new TreeFruit();}@Overridepublic Leaf createLeaf() {return new TreeLeaf();}}
package com.wenniuwuren.abstractfactory;/** * 水果接口 * @author wenniuwuren * */public interface Fruit { public String product();}
package com.wenniuwuren.abstractfactory;/** * 水果实现类:地上的水果 * @author wenniuwuren * */public class GroundFruit implements Fruit {@Overridepublic String product() {return "GroundFruit";}}
package com.wenniuwuren.abstractfactory;/** * 水果实现类: 树上的水果 * @author wenniuwuren * */public class TreeFruit implements Fruit {@Overridepublic String product() {return "TreeFruit";}}
叶子接口:
package com.wenniuwuren.abstractfactory;/** * 叶子接口 * @author wenniuwuren * */public interface Leaf {public String product();}
叶子实现类: 地上的叶子
package com.wenniuwuren.abstractfactory;/** * 叶子实现类: 地上的叶子 * @author wenniuwuren * */public class GroundLeaf implements Leaf {@Overridepublic String product() {return "GroundLeaf";}}
叶子实现类:树上的叶子
package com.wenniuwuren.abstractfactory;/** * 叶子实现类:树上的叶子 * @author wenniuwuren * */public class TreeLeaf implements Leaf {@Overridepublic String product() {return "TreeLeaf";}}
package com.wenniuwuren.abstractfactory;public class Client {public static void main(String[] args) {// 生产树上的水果//Fruit fruit = new TreeFruit(); //没用抽象工厂时的调用方法NatureFactory natureFactory = new TreeFactory();Fruit fruit = natureFactory.createFruit();System.out.println(fruit.product()); // 生产树上的叶子Leaf leaf = natureFactory.createLeaf();System.out.println(leaf.product());// 生产地上的水果natureFactory = new GroundFactory();fruit = natureFactory.createFruit();System.out.println(fruit.product()); // 生产地上的叶子leaf = natureFactory.createLeaf();System.out.println(leaf.product());}}
测试结果:
TreeFruit
TreeLeaf
GroundFruit
GroundLeaf
本文可以和笔者的深入浅出设计模式 ------ Factory Method(工厂方法)参照着看, 可以区分这三个工厂模式的不同。
参考书籍:
《设计模式 : 可复用面向对象软件的基础》
《Effective Java》
《Head First 设计模式》
4 4
- 深入浅出设计模式 ------ Abstract Factory(抽象工厂)
- 深入浅出设计模式(2)——工厂和抽象工厂(Factory/Abstract Factory)
- 设计模式-抽象工厂模式(Abstract Factory)
- 设计模式:抽象工厂模式(Abstract Factory)
- 设计模式(2)- 抽象工厂(Abstract Factory)
- Abstract Factory 抽象工厂设计模式
- Abstract Factory 抽象工厂设计模式
- 抽象工厂(Abstract Factory)设计模式
- 设计模式学习-抽象工厂(Abstract Factory)
- 设计模式-抽象工厂(Abstract Factory)
- 设计模式之一:Abstract Factory 抽象工厂
- 【设计模式】之 Abstract Factory 抽象工厂
- 抽象工厂(Abstract Factory)设计模式
- 设计模式之:抽象工厂(Abstract Factory)
- Abstract Factory 抽象工厂设计模式
- 设计模式-抽象工厂(Abstract Factory)
- 设计模式:抽象工厂-abstract factory
- 设计模式之抽象工厂Abstract Factory
- Ubuntu在Dash主页找不到Startup Applications解决办法
- Linux sort uniq awk head 完成访问日志统计排序功能
- 针对Ubuntu更新后系统变慢的解决办法!
- MESSAGE Job found still running after platform shutdown. eclipse启动失败
- Windows2008R2如何安装framework 3.5
- 深入浅出设计模式 ------ Abstract Factory(抽象工厂)
- Grub2 grub.cfg详解
- Dom创建XML
- Dom解析XML
- Dom4j创建XML
- 10601 学习笔记
- Android 动画
- 10分钟快速学Handlebars
- Android Switch