设计模式实践(二)工厂模式
2015-08-29 20:29
357 查看
强大的Spring框架中的IOC就是用到了这种模式。
接口类:Shirt.java,这里提供了一种显示颜色的方法。
通过这种方式,将所有生成Shirt对象的逻辑集中在ShirtFactory中,所有的需要使用Shirt对象的程序与Shirt接口耦合,而不是以硬编码的实行耦合。这是一种面向接口编程的技术。这种方式提高了系统的可维护性和可扩展性。在上述的例子中,我们可以在工厂类中添加更多的产生不同实例类对象的方法。
工厂接口:ShirtFactoryMethod.java
BlueShirtFactory.java
工厂对象实现方法:
1. 简单工厂设计模式
我们以衬衫为例,原来的模式是我自己做一件,现在是告诉工厂,你帮我生产一件。来实现一个最简单的简单工厂模式,首先由5个类构成(至少),分别是:接口类(用于定义某一类型的对象所具有的方法)、2个实现类(用于实现接口类,实现了多态的一种解释,即相同的方法,不同的结果)、工厂类(用于生成实现类的对象)、最后一个是测试类Main。接口类:Shirt.java,这里提供了一种显示颜色的方法。
public interface Shirt { public void showColor(); }实现类1:WhiteShirt.java
public class WhiteShirt implements Shirt{ private String color = "white"; @Override public void showColor() { System.out.print(color); } }实现类2:BlueShirt.java
public class BlueShirt implements Shirt{ private String color = "blue"; @Override public void showColor() { System.out.print(color); } }工厂类:ShirtFactory.java
public class ShirtFactory { public Shirt getShirt() { //return new WhiteShirt(); return new BlueShirt(); } }测试类:Main.java
public class Main { public static void main(String[] args) { ShirtFactory factory = new ShirtFactory(); Shirt myshirt = factory.getShirt(); myshirt.showColor(); } }
通过这种方式,将所有生成Shirt对象的逻辑集中在ShirtFactory中,所有的需要使用Shirt对象的程序与Shirt接口耦合,而不是以硬编码的实行耦合。这是一种面向接口编程的技术。这种方式提高了系统的可维护性和可扩展性。在上述的例子中,我们可以在工厂类中添加更多的产生不同实例类对象的方法。
2. 工厂方法
工厂方法指的是为每一种类型实现一个工厂类(这些工厂类也是实现了公共的工厂接口),而不是把所有类型的创建都放在一个工厂里面。同样是上面的例子,我们分别为Blue和White提供了工厂类,另外需要顶一个工厂接口。工厂接口:ShirtFactoryMethod.java
public interface ShirtFactoryMethod { Shirt getShirt(); }两个工厂实现类:
BlueShirtFactory.java
public class BlueShirtFactory implements ShirtFactoryMethod{ @Override public Shirt getShirt() { return new BlueShirt(); } }WhiteSHirtFactory.java
public class WhiteSHirtFactory implements ShirtFactoryMethod{ @Override public Shirt getShirt() { return new WhiteShirt(); } }测试类:
public class Main { public static void main(String[] args) { <strong>ShirtFactoryMethod factory = new WhiteSHirtFactory();</strong> Shirt myshirt = factory.getShirt(); myshirt.showColor(); } }
3. 抽象工厂模式
工厂方法虽然解决了在简单工厂方法中工厂类同进行逻辑判断创建对象的复杂方法,但是也造成了工厂类和代码的耦合。我们通过实现另外一个类来实现工厂对象的创建,从而解决了工厂对象和程序的硬编码问题。工厂对象实现方法:
public class Main { public static void main(String[] args) { <strong>ShirtFactoryMethod factory = AbstractShirtFactory.getShirtFactory("blue");</strong> Shirt myshirt = factory.getShirt(); myshirt.showColor(); } }
相关文章推荐
- iPhone开发之UIScrollView滚动组件的使用(七)利用NSTimer计时器和UIPageControl组件代码实现图片轮播器
- 数据库笔记2015-8-29
- SolrCloudpy 学习笔记
- SQLite_Android
- 学习《算法导论》第一章 插入排序 总结
- lvs、keepalived 集群管理
- uvalive4838(凸包+重心)
- 从源码分析struts2中返回json数据的原理
- uvalive4836(枚举)
- 后IOE时代,Mysql 与 Postgre SQL的对比
- HDOJ5131 Song Jiang's rank list(模拟)
- github
- UVa 11549 - Calculator Conundrum(Floyd判圈法)
- 电磁铁、电磁阀
- 基于并发包同步机制实现生产者-消费者模式
- mfc文件复制与删除
- 【Android基础】-Service组件使用详解
- 求单链表是否带环,和环长
- POJ 2411 Mondriaan's Dream( 轮廓线dp )
- synchronized条件控制wait()、notify()