`

抽象工厂之更换皮肤

阅读更多

 

 工厂工厂,顾名思义就是生产产品的加工厂。抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。

  工厂模式在实际应用中用的非常多,比如说大家用的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() (不过首先要建立具体产品和具体的工厂).其他代码都无需改动,这样就很好的实现了可扩展性。

分享到:
评论

相关推荐

    抽象工厂模式更换UI皮肤设计模式作业(100分)

    使用抽象工厂模式创建皮肤工厂,用子工厂的产品去实例化 用的Jframe 图片放在与代码根目录同级目录 打开eclipse运行Client_Start即可运行 左上角下拉菜单显示选择皮肤 不同的字体,背景颜色,窗口图标 抽象工厂模式...

    C#三层+抽象工厂-图书管理系统项目

    摘要:C#源码,数据库应用,图书管理系统 C#三层+抽象工厂-验证完善-图书管理系统V1.0项目源码基础功能:  1、图书类型新增、删除、修改、查询(查询所有类型、图书类型详细、)。  2、图书新增、修改、删除、查询...

    皮肤算法1

    皮肤算法1是一个与软件界面个性化相关的技术,主要目标是实现用户界面皮肤的动态更换,提供良好的用户体验。在给定的文件列表中,我们看到有两个Java源代码文件:ImageFactoryImpl.java和SkinFactory.java,它们很...

    中南大学软件学院体系结构实验报告-实验2(推荐文档).doc

    实验内容包括对图形库API的重构,简单工厂模式的应用,工厂方法模式在图片读取器中的实现,以及抽象工厂模式在设计皮肤库中的应用。 【实验内容详解】 1. **图形库API重构**: - 实验首先指出,当前图形库API的类...

    皮肤算法2

    【标题】"皮肤算法2"涉及的是在软件开发中如何实现用户界面(UI)的皮肤更换功能,这一功能通常在图形用户界面应用中很常见,允许用户根据个人喜好更改应用程序的外观。通过皮肤算法,开发者可以创建一个灵活的系统...

    asp.net2.0论坛源码

    在这个论坛系统中,抽象工厂可能被用来生成不同类型的界面元素或者数据库访问对象,以实现组件的解耦和灵活性,使得更换UI或者数据存储方式变得更为容易。 "七层结构"表明该论坛软件遵循了一种分层架构,通常包括...

    班主任日常工作管理系统

    这是一个很完整的班主任日常工作管理系统,使用技术 C#,三层架构,抽象工厂设计模式,皮肤更换等技术..包含内容:源代码,详细需求分析(WORD文档),项目规格说明书,E-R图,流程图,用例图,数据库,数据库设计表等详细资料.你...

    Jive论坛分析_完整版

    该项目的设计思想非常先进,融合了多种现代软件工程理念和技术,包括设计模式、可更换皮肤以及插件机制等。 #### 2. 设计理念 - **设计理念**:Jive的设计遵循了面向接口编程的原则,即编写代码时关注接口而非具体...

    (全)传智播客PHP就业班视频完整课程

    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 ...

    韩顺平PHP JS JQUERY 所有视频下载种子 货真价实

    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 ...

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    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 ...

    史上最全传智播客PHP就业班视频课,8月份视频

    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 ...

    史上最全韩顺平传智播客PHP就业班视频,9月份全集

    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 ...

Global site tag (gtag.js) - Google Analytics