最近在整理、学习设计模式相关的知识,大部分是些学习笔记或者网络上整理过来的资料,以利于复习、理解之用。

  简单工厂设计模式:

1、接口相关知识复习:

1 一种特殊的抽象类,方法都是抽象的,属性都是常量
2 接口的思想:封装隔离-- 对被隔离体的行为的封装或者对被隔离体的职责的封装
3 使用接口的好处:隔离开外部调用和内部是实现 -- 接口是系统可插拔性的保证
4 接口和抽象类的选择:
5     优先选用接口
6     如果要定义子类的行为又要为子类提供公共功能的时候选择抽象类
7 面向接口编程是Java编程中的一个重要的原则。

2、在java中非常重要的三层:

每一个部分之间的通信都是通过接口进行的,实际上在每一个模块内部也都是通过接口进行通信的。

在Java中实际上子系统(subSystem)、模块(Module)、系统(System)、组件(Component)都是能完成一定功能的封装体。封装体提供给外部的调用方式都是通过接口进行的。

3、经典问题:

请看代码:

View Code
Api.java
package com.xinye.designpattern.simplefactory;
/**
 * 接口(提供通用的、抽象的、非具体的功能)
 * @author xinye
 *
 */
public interface Api {
    public void test(String s);
}

Impl.java
package com.xinye.designpattern.simplefactory;
/**
 * 具体的接口实现类
 * @author 实现类
 *
 */
public class Impl implements Api {

    @Override
    public void test(String s) {
        System.out.println("您输入的是:" + s);
    }

}

Client.java
package com.xinye.designpattern.simplefactory;
/**
 * 客户端类
 * @author xinye
 *
 */
public class Client {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Api api = new Impl();
        api.test("我正在学习设计模式");

    }

}

问题:客户端需要知道接口和具体的实现类。
由此可见简单工厂模式的主要功能是:不想让客户端知道具体的实现的时候可以使用。

4、解决办法:

代码:

 1 Api.java
 2 package com.xinye.designpattern.simplefactory;
 3 /**
 4  * 接口(提供通用的、抽象的、非具体的功能)
 5  * @author xinye
 6  *
 7  */
 8 public interface Api {
 9     public void test(String s);
10 }
11 
12 ImpA.java
13 package com.xinye.designpattern.simplefactory;
14 /**
15  * 实现类A
16  * @author xinye
17  *
18  */
19 public class ImplA implements Api {
20 
21     @Override
22     public void test(String s) {
23         System.out.println("实现类A - 您输入的内容:" + s);
24     }
25 
26 }
27 
28 
29 ImplB.java
30 package com.xinye.designpattern.simplefactory;
31 /**
32  * 实现类B
33  * @author xinye
34  *
35  */
36 public class ImplB implements Api {
37 
38     @Override
39     public void test(String s) {
40         System.out.println("实现类B - 您输入的内容:" + s);
41     }
42 
43 }
44 
45 
46 Factory.java
47 package com.xinye.designpattern.simplefactory;
48 /**
49  * 工厂类
50  * @author xinye
51  *
52  */
53 public class Factory {
54     public static Api createApi(int condition){
55         Api api = null;
56         if(condition == 1){
57             api = new ImplA();
58         }else{
59             api = new ImplB();
60         }
61         return api;
62     }
63 }
64 
65 
66 Client.java
67 package com.xinye.designpattern.simplefactory;
68 /**
69  * 客户端类
70  * @author xinye
71  *
72  */
73 public class Client {
74 
75     /**
76      * @param args

77      */
78     public static void main(String[] args) {
79         Api api = Factory.createApi(1);
80         api.test("工厂类中创建的对象");
81 
82     }
83 
84 }

 

 

posted on 2013-03-25 00:57  wangwangheng  阅读(296)  评论(0编辑  收藏  举报