Java与设计模式(03)--抽象工厂模式
来源:互联网 发布:精易编程助手网页抓包 编辑:程序博客网 时间:2024/06/15 10:23
上一次我们讨论了工厂方法模式,我们知道,在工厂方法模式中,我们每创建一个新的实体类XXXCar,都对应一个XXXCarFactory,在使用的时候直接使用XXXCarFactory的produce方法创建对应的XXXCar对象。
接下来我们讨论抽象工厂模式。我们考虑一下窗口管理器的一个问题:
对于每种界面风格,窗口管理器(WindowManager)需要对其中的某个控件(Component)提供一种绘制方法(draw)。于是我们有了如下的类图:
从以上我们能够看到,我们的程序结构中有如下几种类型:
- 抽象的UIComponent接口,定义了draw()方法;
- 具体的XXXButton和XXXText类,实现了不同的draw()方法体;
- 抽象的Theme接口,定义了getButton和getText方法;
- 具体的Win7Theme和WinXPTheme类,实现了不同的getXXX方法;
完整的代码基本如下:
Component
public interface Component {public void draw();}
Button
public abstract class Button implements Component {public abstract void draw();}
TextField
public abstract class TextField implements Component {public abstract void draw();}
Win7Button
public class Win7Button extends Button {@Overridepublic void draw() {System.out.println("Win7 Button Draw...");}}
Win7TextField
public class Win7TextField extends TextField {@Overridepublic void draw() {System.out.println("Win7 TextField Draw...");}}
WinXPButton
public class WinXPButton extends Button {@Overridepublic void draw() {System.out.println("WinXP Button Draw...");}}
WinXPTextField
public class WinXPTextField extends TextField {@Overridepublic void draw() {System.out.println("WinXP TextField Draw...");}}
工厂类:
Theme
public interface Theme {public Button getButton();public TextField getTextField();}
Win7Theme
public class Win7Theme implements Theme {@Overridepublic Button getButton() {return new Win7Button();}@Overridepublic TextField getTextField() {return new Win7TextField();}}
WinXPTheme
public class WinXPTheme implements Theme {@Overridepublic Button getButton() {return new WinXPButton();}@Overridepublic TextField getTextField() {return new WinXPTextField();}}
测试类:
public class Test {public static void main(String[] args) {Theme theme = new Win7Theme();Component button = theme.getButton();Component text = theme.getTextField();button.draw();text.draw();}}
- Java与设计模式-抽象工厂模式
- Java设计模式--简单工厂模式与抽象工厂模式
- Java与设计模式(03)--抽象工厂模式
- java设计模式--抽象工厂
- Java设计模式-抽象工厂
- Java设计模式--抽象工厂
- java设计模式-抽象工厂
- Java设计模式-抽象工厂设计模式
- java设计模式之抽象工厂模式
- JAVA设计模式之抽象工厂模式
- Java设计模式_抽象工厂模式
- Java设计模式之抽象工厂模式
- 设计模式(JAVA)------抽象工厂模式
- java设计模式之抽象工厂模式
- 【Java设计模式】之抽象工厂模式
- java设计模式---抽象工厂模式
- java设计模式---抽象工厂模式
- java设计模式---抽象工厂模式
- Java 反射机制(上)
- Activity页面切换的效果
- boost::preprocess的神秘魔法的实现细节:BOOST_PP_SEQ_SIZE(SEQ)
- CentOS 6.3部署Oracle 11g R2手记
- 数据库设计中,日期字段的类型应该如何选择?
- Java与设计模式(03)--抽象工厂模式
- Solution for "Could not initialize class org.eclipse.jface.preference.PreferenceConverter"
- 杭电2016数据的交换输出解题报告
- Android文件操作
- Innovation Games将在Santa Clara举行峰会庆祝10岁生日
- 英语小结
- Hdu 2045 - 不容易系列之(3)—— LELE的RPG难题
- sdf
- 买房霸王条款十二条,都是“坑爹”条款!