设计模式之一:Abstract Factory 抽象工厂
来源:互联网 发布:武汉知金教育怎么样 编辑:程序博客网 时间:2024/05/22 04:53
意图(Intent)
提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定他们具体的类。
动机(Motivation)
在软件系统中,经常面临着“一系列星湖依赖的对象”的创建工作;同时,由于需求的变化,往往促在更多系列对象的创建工作。
UML图
程序
首先建立描述一个人基本资料的 PersonInterface
package tw.idv.javax.demo.Interface; import java.util.Calendar; public interface PersonInterface { public static final String ROLE = PersonInterface.class.getName(); public abstract String getId() throws Exception; public abstract void setId(String id) throws Exception; public abstract String getName() throws Exception; public abstract void setName(String name) throws Exception; public abstract Calendar getBirthday() throws Exception; public abstract void setBirthday(Calendar birthday) throws Exception; }接着实作描述一个人基础资料的抽象PersonInterfacelmpl
package tw.idv.javax.demo.Implements; import java.util.Calendar; import tw.idv.javax.demo.Interface.PersonInterface; public abstract class PersonInterfaceImpl implements PersonInterface { private String id = null; private String name = null; private Calendar birthday = null; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Calendar getBirthday() { return birthday; } public void setBirthday(Calendar birthday) { this.birthday = birthday; } }接着继承 PersonInterfaceImpl ,写一个描述孩童基本资料 Children
package tw.idv.javax.demo.Extends; import tw.idv.javax.demo.Implements.PersonInterfaceImpl; public class Children extends PersonInterfaceImpl { }接着继承 PersonInterfaceImpl ,写一个描述成人基本资料 Adult
package tw.idv.javax.demo.Extends; import tw.idv.javax.demo.Implements.PersonInterfaceImpl; public class Adult extends PersonInterfaceImpl { private int income = 0; public int getIncome() { return income; } public void setIncome(int income) { this.income = income; } }比较这几个类别,可以发现接口其实只是在定义一个架构,并没有实际的逻辑程式,而要实现接口时,若是还有其他物件需要继承你正要实现的类别时,最好把要实现的类别,定义为抽象类别
适用性
在以下情况可以使用抽象工厂模式
一个系统要独立于它的产品的创建、组合和表示时。 一个系统要由多个产品系列中的一个来配置时。 当你要强调一系列相关的产品对象的设计以变进行联合使用时。 当你提供一个产品类库,而只想显示他们的接口而不是实现时。
优点
- 具体产品从客户代码中被分离出来。
- 容易改变产品的系列。
- 将一个系列的产品族统一到一起创建。
缺点
在产品族中扩展新的产品是很困难的,它需要修改抽象工厂的接口。
要点
如果没有应对“多系列对象构建”的需求变化,则没有必要使用AbstractFactory模式,这时候使用简单的静态工厂完全可以。
“系列对象”值得是这些对象之间有相互依赖、或者作用的关系,例如游戏开发场景中的“道路”于“房屋”的依赖,“道路”于“地道”的依赖。
AbstractFactory模式主要是在于应用对“新系列”的需求变动。
AbstractFactory模式经常和FactoryMethod模式共同组合来应对“对象创建”的需求变化。
相关模式
工厂方法模式-
工厂类别通常工厂方法模式实现。
单例模式
具体工厂通常只需要一个实例。
- 设计模式之一:Abstract Factory 抽象工厂
- C++设计模式之一: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
- shell grep 参数详解
- oracle 忘记sys 密码后,更改方法
- Oracle修改column值
- GetClipBox 在scrollview中使用注意事项
- Oracle 回收站功能,彻底删除表
- 设计模式之一:Abstract Factory 抽象工厂
- Unix系统文件权限管理
- The New C++ -- 基础知识
- 发现神奇的lombok
- Windows 8一推出就会死亡?
- 苹果黄牛事件真相
- 分页类的使用
- 语言设计的艺术——读《松本行弘的程序世界》
- 关于个人开发游戏的一些经验