《设计模式之工厂模式》
来源:互联网 发布:数据挖掘用什么软件 编辑:程序博客网 时间:2024/06/16 20:55
1. 工厂模式的定义
工厂模式的英文定义为:
Define an iterface for creating an object, but let subclass decide which class to instantiate. Factory Method let a class defer instantiantion to subclasses.
这意味着:定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到子类。工厂类的类图如下:
工厂模式有四类角色:
1)抽象工厂角色:该角色是工厂模式的核心,于应用系统无关,任何在创建对象的工厂类必须要实现这个接口。
2)具体工厂角色:该角色实现了抽象工厂接口,该类包含与应用密切相关的逻辑,收到客户端的调用以创建产品对象。
3)抽象产品角色:该角色负责定义产品的共性,实现了对产品最抽象的定义。
4)具体产品角色:该角色实现了抽象产品接口,工厂方法所创建的每一个对象都是某个具体的产品角色的实例。
2. 工厂模式的优点及应用
优点:
1)良好的封装性,代码结构清晰。一个对象的创建是有约束条件的,如果一个调用者需要一个具体的产品对象,只需要知道这个产品的的类名或者约束字符串即可,不需要知道创建对象的过程如何,降低了模块之间的耦合性。
2)优秀的扩展性。再增加产品类的情况下,只需要适当的修改具体的工厂类或者宽展一个工厂类,就可以适应变化。
3)屏蔽产品类。产品类的实现如何变化,调用者都无需关心,只需要关心产品的接口,只要接口保持不变,系统上层的模块就不要发生变化,因为产品的实例化是由工厂类负责的,具体生产哪一种产品由不同的工厂类决定。
4)工厂类模式是典型的解耦框架。
应用:
1)是new一个对象的替代方法。
2)需要灵活可扩展框架。
3)异构项目。
4)驱动测试。
3. 工厂模式的实例
本实例通过模拟手机生产来展示工厂模式,类图设计如下:
下面为代码:
①工厂类:
PhoneProducer.java
public interface PhoneProducer { public Phone factory(); }
MiPhoneProducer.java
public class MiPhoneProducer implements PhoneProducer { public Phone factory(){ return new MiPhone(); } }
MiNotePhoneProducer.java
public class MiNotePhoneProducer implements PhoneProducer { public Phone factory(){ return new MiNotePhone(); } }
②产品类:
Phone.java
public interface Phone { public void installCPU(); public void installMemory(); public void installShell(); }
MiPhone.java
public class MiPhone implements Phone { public static String name = "小米5"; public void installCPU(){ System.out.println(this.name + "安装了 骁龙820 处理器..."); } public void installMemory(){ System.out.println(this.name + "安装了 2GB LPDDR4..."); } public void installShell(){ System.out.println(this.name + "安装了 金属外壳..."); } }
MiNotePhone.java
public class MiNotePhone implements Phone { public static String name = "小米Note Pro"; public void installCPU(){ System.out.println(this.name + "安装了 骁龙810 处理器..."); } public void installMemory(){ System.out.println(this.name + "安装了 4GB LPDDR4..."); } public void installShell(){ System.out.println(this.name + "安装了 塑料外壳..."); } }
测试类:
TestFactory.java
public class TestFactory{ public static void main(String[] argv){ PhoneProducer phoneProducer = new MiPhoneProducer(); Phone miPhone = phoneProducer.factory(); miPhone.installCPU(); miPhone.installMemory(); miPhone.installShell(); PhoneProducer phoneProducer1 = new MiNotePhoneProducer(); Phone miNotePhone = phoneProducer1.factory(); miNotePhone.installCPU(); miNotePhone.installMemory(); miNotePhone.installShell(); } }
4. 测试结果
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之---工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之-工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之工厂模式
- 设计模式之 ------工厂模式
- 设计模式之工厂模式
- hive建表
- Nxlog——日志采集神器简介
- 关于UPnP协议在快传功能实现需求的解读
- Android 实现个性的ViewPager切换动画 实战PageTransformer(兼容Android3.0以下)
- 在Java堆中创建对象的全过程
- 《设计模式之工厂模式》
- Parallel Containers and Objects
- 去掉数组中重复项之越过重复值法
- 设计模式之观察者模式
- java加解密之AES使用
- leetcode:字符串之Simplify Path
- 【AngularJs】Angular双向数据绑定
- myeclipse快捷键
- An Introduction to Thread in the upcoming book From: Introduction to the C++ Boost Libraries