(四)(创建型模式)抽象工厂模式
2016-11-22 20:55
190 查看
一、抽象工厂模式(Abstract factory pattern):
[b]提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。[/b]
二、应用场景:
建立一个工厂,根据工厂的子类决定实例化产品的组合,返回相应的产品组合。
三、应用实例:
动物界的掌控者Tom,想要建立一个水果工厂,当客户指定具体的水果工厂组合时,该水果工厂就能生产对应的水果组合。(要求:具体的水果的组合易扩展)
四、方案:
UML图:
代码:
产品接口-苹果
具体产品-红苹果
具体产品-蓝苹果
产品接口-香蕉
具体产品-红香蕉
具体产品-蓝香蕉
产品接口-橘子
具体产品-红橘子
具体产品-蓝橘子
工厂接口-水果工厂
产品族-红色水果
产品族-蓝色水果
客户端调用-客户买红色水果,蓝色水果
备注:如果要扩展产品组合,只需新增一个具体的工厂类,组合生产对应的产品,原代码不需要做任何修改,满足开闭原则。
如果要扩展已存在产品的具体产品,只需新增一个具体的产品类继承该产品,新增一个产品组合工厂即可, 原代码不需要做任何修改,满足开闭原则。
如果要扩展一个新的产品类型,则需要新增新产品接口,和新产品的具体产品类,并改变工厂接口的代码,需要更改原代码。
以上内容,纯属个人见解,如有错误,望不吝指正。
[b]提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。[/b]
二、应用场景:
建立一个工厂,根据工厂的子类决定实例化产品的组合,返回相应的产品组合。
三、应用实例:
动物界的掌控者Tom,想要建立一个水果工厂,当客户指定具体的水果工厂组合时,该水果工厂就能生产对应的水果组合。(要求:具体的水果的组合易扩展)
四、方案:
UML图:
代码:
package com.yq.test; /** * Created by yq on 2016/11/22. */ public interface Apple { void produceApple(); }
产品接口-苹果
package com.yq.test; /** * Created by yq on 2016/11/22. */ public class RedApple implements Apple { public void produceApple() { System.out.println("红苹果"); } }
具体产品-红苹果
package com.yq.test; /** * Created by yq on 2016/11/22. */ public class BlueApple implements Apple { public void produceApple() { System.out.println("蓝苹果"); } }
具体产品-蓝苹果
package com.yq.test; /** * Created by yq on 2016/11/22. */ public interface Banana { void produceBanana(); }
产品接口-香蕉
package com.yq.test; /** * Created by yq on 2016/11/22. */ public class RedBanana implements Banana { public void produceBanana() { System.out.println("红香蕉"); } }
具体产品-红香蕉
package com.yq.test; /** * Created by yq on 2016/11/22. */ public class BlueBanana implements Banana { public void produceBanana() { System.out.println("蓝香蕉"); } }
具体产品-蓝香蕉
package com.yq.test; /** * Created by yq on 2016/11/22. */ public interface Orange { void produceOrange(); }
产品接口-橘子
package com.yq.test; /** * Created by yq on 2016/11/22. */ public class RedOrange implements Orange { public void produceOrange(){ System.out.println("红橘子"); } }
具体产品-红橘子
package com.yq.test; /** * Created by yq on 2016/11/22. */ public class BlueOrange implements Orange { public void produceOrange() { System.out.println("蓝橘子"); } }
具体产品-蓝橘子
package com.yq.test; /** * Created by yq on 2016/11/22. */ public interface Factory { Apple appleFactory(); Banana bananaFactory(); Orange orangeFactory(); }
工厂接口-水果工厂
package com.yq.test; /** * Created by yq on 2016/11/22. */ public class RedFactory implements Factory { public Apple appleFactory() { Apple apple = new RedApple(); return apple; } public Banana bananaFactory() { Banana banana = new RedBanana(); return banana; } public Orange orangeFactory() { Orange orange = new RedOrange(); return orange; } }
产品族-红色水果
package com.yq.test; /** * Created by yq on 2016/11/22. */ public class BlueFactory implements Factory { public Apple appleFactory() { Apple apple = new BlueApple(); return apple; } public Banana bananaFactory() { Banana banana = new BlueBanana(); return banana; } public Orange orangeFactory() { Orange orange = new BlueOrange(); return orange; } }
产品族-蓝色水果
package com.yq.test; /** * Created by yq on 2016/11/22. */ public class Clinet { public static void main(String[] args) { Apple redApple = new RedFactory().appleFactory(); Banana redBanana = new RedFactory().bananaFactory(); Orange redOrange = new RedFactory().orangeFactory(); redApple.produceApple(); redBanana.produceBanana(); redOrange.produceOrange(); Apple blueApple = new BlueFactory().appleFactory(); Banana blueBanana = new BlueFactory().bananaFactory(); Orange blueOrange = new BlueFactory().orangeFactory(); blueApple.produceApple(); blueBanana.produceBanana(); blueOrange.produceOrange(); } } //output 红苹果 红香蕉 红橘子 蓝苹果 蓝香蕉 蓝橘子
客户端调用-客户买红色水果,蓝色水果
备注:如果要扩展产品组合,只需新增一个具体的工厂类,组合生产对应的产品,原代码不需要做任何修改,满足开闭原则。
如果要扩展已存在产品的具体产品,只需新增一个具体的产品类继承该产品,新增一个产品组合工厂即可, 原代码不需要做任何修改,满足开闭原则。
如果要扩展一个新的产品类型,则需要新增新产品接口,和新产品的具体产品类,并改变工厂接口的代码,需要更改原代码。
以上内容,纯属个人见解,如有错误,望不吝指正。
相关文章推荐
- 设计模式杂谈:创建型模式之抽象工厂模式(Abstract Factory)
- 创建型模式--抽象工厂模式(Abstract Factory)
- (第Ⅱ部分 创建型模式篇) 第2章 抽象工厂模式(Abstract Factory)
- 面向对象设计模式之AbstractFactory抽象工厂模式(创建型)
- 面向对象设计模式之AbstractFactory抽象工厂模式(创建型)
- 3、Abstract Factory 抽象工厂模式(创建型模式)
- 创建型模式之抽象工厂模式(AbstractFactory Pattern)C++实现******
- 五.创建型设计模式——Abstract Factory Pattern(抽象工厂模式)
- [导入]C#面向对象设计模式纵横谈(4):Abstract Factory 抽象工厂模式(创建型模式)
- Abstract Factory 抽象工厂模式(创建型模式)
- (第Ⅱ部分 创建型模式篇) 第2章 抽象工厂模式(Abstract Factory)
- [创建型模式系列]Abstract factory of Design Pattern模式设计之抽象工厂模式
- 创建型模式——抽象工厂模式(Abstract Factory Pattern)
- C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)
- C#面向对象设计模式学习笔记(2) - Abstract Factory 抽象工厂模式(创建型模式)
- 设计模式——创建型模式之 Abstract Factory抽象工厂模式
- Abstract Factory 抽象工厂模式(创建型模式)
- 设计模式笔记(3)---抽象工厂模式(创建型)
- [创建型模式:抽象工厂模式]
- 设计模式笔记(3)---抽象工厂模式(创建型)