工厂工厂,顾名思义就是生产产品的加工厂。抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。
工厂模式在实际应用中用的非常多,比如说大家用的QQ的换皮肤功能,就是应用工厂模式实现的。只要选中某个皮肤,整个界面风格都改变了,包括背景图、按钮、界面风格等。下面我就用工厂模式来实现简单的换皮肤功能。
假如一套皮肤有背景图片、界面和按钮,这些我们叫做抽象产品,比如说背景图片有红色风格背景图片、蓝色风格背景图片,界面也有红色风格界面和蓝色风格界面,界面也一样。首先我们建立这些抽象产品:
BackGround.java
1 public abstract class Background { 2 public abstract void showBgPic(); 3 }
Button.java
1 public abstract class Button { 2 public abstract void onclick(); 3 }
QQFrame.java
1 public abstract class QQFrame { 2 public abstract void printColor(); 3 }
然后建立具体产品,如建立一个红色风格的皮肤,则需要建立红色风格的背景图片、红色风格的界面、红色风格的按钮。代码如下
1 BlueBackground.java 2 public class BlueBackground extends Background { 3 4 @Override 5 public void showBgPic() { 6 System.out.println("蓝色的背景图片...."); 7 } 8 9 } 10 11 BlueButton.java 12 public class BlueButton extends Button { 13 14 @Override 15 public void onclick() { 16 System.out.println("蓝色风格的按钮被按下"); 17 } 18 19 } 20 21 BlueFrame.java 22 public class BlueFrame extends QQFrame { 23 24 @Override 25 public void printColor() { 26 System.out.println("蓝色的界面风格"); 27 } 28 29 }
然后建立抽象工厂SkinFactory,抽象工厂包括创建背景图片、创建界面、创建按钮的抽象方法,代码如下:
1 public abstract class SkinFactory { 2 public abstract Background createBackground(); 3 public abstract Button createButton(); 4 public abstract QQFrame createFrame(); 5 }
写好抽象工厂之后就可以写具体的工厂了,比如说BlueSkinFactory,具体工厂要继承抽象工厂SkinFactory,并实现其的抽象方法。代码如下:
1 public class BlueSkinFactory extends SkinFactory { 2 3 @Override 4 public Background createBackground() { 5 // TODO Auto-generated method stub 6 return new BlueBackground(); 7 } 8 9 @Override 10 public Button createButton() { 11 // TODO Auto-generated method stub 12 return new BlueButtom(); 13 } 14 15 @Override 16 public QQFrame createFrame() { 17 // TODO Auto-generated method stub 18 return new BlueFrame(); 19 } 20 21 }
最后写一个测试类,代码如下:
1 public class Test { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 SkinFactory skinFactory = new BlueSkinFactory(); 8 Background background = skinFactory.createBackground();//以后需要换皮肤只需改这一句 9 Button button = skinFactory.createButton(); 10 QQFrame frame = skinFactory.createFrame(); 11 background.showBgPic(); 12 button.onclick(); 13 frame.printColor(); 14 } 15 16 }
这样就实现了简单的换皮肤功能了。如果需要换皮肤,则只要将具体工厂换一个就好了,比如说将SkinFactory skinFactory = new BlueSkinFactory()改成SkinFactory skinFactory = new RedSkinFactory() (不过首先要建立具体产品和具体的工厂).其他代码都无需改动,这样就很好的实现了可扩展性。
相关推荐
使用抽象工厂模式创建皮肤工厂,用子工厂的产品去实例化 用的Jframe 图片放在与代码根目录同级目录 打开eclipse运行Client_Start即可运行 左上角下拉菜单显示选择皮肤 不同的字体,背景颜色,窗口图标 抽象工厂模式...
摘要:C#源码,数据库应用,图书管理系统 C#三层+抽象工厂-验证完善-图书管理系统V1.0项目源码基础功能: 1、图书类型新增、删除、修改、查询(查询所有类型、图书类型详细、)。 2、图书新增、修改、删除、查询...
皮肤算法1是一个与软件界面个性化相关的技术,主要目标是实现用户界面皮肤的动态更换,提供良好的用户体验。在给定的文件列表中,我们看到有两个Java源代码文件:ImageFactoryImpl.java和SkinFactory.java,它们很...
实验内容包括对图形库API的重构,简单工厂模式的应用,工厂方法模式在图片读取器中的实现,以及抽象工厂模式在设计皮肤库中的应用。 【实验内容详解】 1. **图形库API重构**: - 实验首先指出,当前图形库API的类...
【标题】"皮肤算法2"涉及的是在软件开发中如何实现用户界面(UI)的皮肤更换功能,这一功能通常在图形用户界面应用中很常见,允许用户根据个人喜好更改应用程序的外观。通过皮肤算法,开发者可以创建一个灵活的系统...
在这个论坛系统中,抽象工厂可能被用来生成不同类型的界面元素或者数据库访问对象,以实现组件的解耦和灵活性,使得更换UI或者数据存储方式变得更为容易。 "七层结构"表明该论坛软件遵循了一种分层架构,通常包括...
这是一个很完整的班主任日常工作管理系统,使用技术 C#,三层架构,抽象工厂设计模式,皮肤更换等技术..包含内容:源代码,详细需求分析(WORD文档),项目规格说明书,E-R图,流程图,用例图,数据库,数据库设计表等详细资料.你...
该项目的设计思想非常先进,融合了多种现代软件工程理念和技术,包括设计模式、可更换皮肤以及插件机制等。 #### 2. 设计理念 - **设计理念**:Jive的设计遵循了面向接口编程的原则,即编写代码时关注接口而非具体...
10-20 4 smarty应用 更换网站皮肤4 10-20 5 smarty二级联动 10-20 6 smarty完成静态化 10-20 7 10-20 8 smarty分页技术 10-20 9 10-22 1 ajax介绍 无刷新验证用户名 10-22 2 ajax如何处理xml格式返回数据 10-22 3 ...
10-20 4 smarty应用 更换网站皮肤4 10-20 5 smarty二级联动 10-20 6 smarty完成静态化 10-20 7 10-20 8 smarty分页技术 10-20 9 10-22 1 ajax介绍 无刷新验证用户名 10-22 2 ajax如何处理xml格式返回数据 10-22 3 ...
10-20 4 smarty应用 更换网站皮肤4 10-20 5 smarty二级联动 10-20 6 smarty完成静态化 10-20 7 10-20 8 smarty分页技术 10-20 9 10-22 1 ajax介绍 无刷新验证用户名 10-22 2 ajax如何处理xml格式返回数据 10-22 3 ...
10-20 4 smarty应用 更换网站皮肤4 10-20 5 smarty二级联动 10-20 6 smarty完成静态化 10-20 7 10-20 8 smarty分页技术 10-20 9 10-22 1 ajax介绍 无刷新验证用户名 10-22 2 ajax如何处理xml格式返回数据 10-22 3 ...
10-20 4 smarty应用 更换网站皮肤4 10-20 5 smarty二级联动 10-20 6 smarty完成静态化 10-20 7 10-20 8 smarty分页技术 10-20 9 10-22 1 ajax介绍 无刷新验证用户名 10-22 2 ajax如何处理xml格式返回数据 10-22 3 ...
利用泛型与反射简化抽象工厂** 结合使用泛型和反射可以实现更加灵活和扩展性强的工厂模式,通过反射动态创建不同类型的对象。 **30. 复制对象** 可以使用序列化或克隆接口来实现对象的深复制。对于简单的对象,也...