博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抽象工厂之更换皮肤
阅读量:6975 次
发布时间:2019-06-27

本文共 2671 字,大约阅读时间需要 8 分钟。

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

  工厂模式在实际应用中用的非常多,比如说大家用的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.java12 public class BlueButton extends Button {13 14     @Override15     public void onclick() {16         System.out.println("蓝色风格的按钮被按下");17     }18 19 }20 21 BlueFrame.java22 public class BlueFrame extends QQFrame {23 24     @Override25     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     @Override10     public Button createButton() {11         // TODO Auto-generated method stub12         return new BlueButtom();13     }14 15     @Override16     public QQFrame createFrame() {17         // TODO Auto-generated method stub18         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() (不过首先要建立具体产品和具体的工厂).其他代码都无需改动,这样就很好的实现了可扩展性。

转载地址:http://yursl.baihongyu.com/

你可能感兴趣的文章
2020年我国软件产业收入将突破8万亿元
查看>>
微软为中国政府推出特供版Windows 10,这里有你需要了解的几个事实
查看>>
岗位信息显示英伟达芯片重返苹果Mac电脑
查看>>
Facebook押宝的“聊天机器人”会不会仅是一场泡沫?
查看>>
智慧城市曙光在眼前 实现快速发展发力十要素
查看>>
企业微信入局,移动办公又演化成BAT大战?
查看>>
希捷发布企业级固态硬盘 最高速度可达10GB/s
查看>>
安防监控防雷器选择技巧
查看>>
工作后对单元测试学习的一点总结
查看>>
无线数据传输新纪录达到6Gbps
查看>>
细分差异化,钉钉为何寻求不同CRM厂商合作
查看>>
Linux使用fuser命令找出访问文件系统的进程
查看>>
智能家居联网通信技术谁将一统天下?
查看>>
重庆企业首创ZPLC技术物联网光环境系统
查看>>
《数值分析(原书第2版)》—— 0.1 多项式求值
查看>>
MEMS传感器市场扩容 国产化水平亟待提升
查看>>
ASP.NET Aries 入门开发教程1:框架下载与运行
查看>>
周鸿祎:网络攻击新时代开启 要提高安全意识
查看>>
关于Solaris的9个小技巧
查看>>
网络安全加速推进 高增长引基金布局
查看>>