2. 工厂设计模式

来源:互联网 发布:淘宝网天猫全棉女卫衣 编辑:程序博客网 时间:2024/05/16 01:39
为什么产生了工厂设计模式
 当有一组逻辑上相关联的对象 , 且每个对象拥有大量属性时 , 不应用new的方法构造对象 , 这会造成客户端调用代码的复杂性 , 用工厂类创建对象 , 来屏蔽构建对象时对多个属性赋初值的操作
1.  工厂模式
 (1)  工厂模式用于创建一组业务上相关的对象, 这些对象之间有一个显著的区别, 用工厂类根据这一个区别 , 来产生不同的对象
 (2)  把这些业务上相关的一组对象抽象出一个接口 , 使得产生的对象解耦 
 (3)  把工厂类抽象出接口, 让产生对象的方法解耦
  eg : Product : 白人 , 黑人 ; 这两种人只有肤色这个显著区别, 于是让工厂通过肤色的不同 , 产生不同的人种

2. 简单工厂 (唯一的工厂类, 创建对象的方法是静态方法)
    当去除AbstractHumanFactory , 让HumanFacctoty成为唯一的顶层工厂类 , createHuman()变成static方法 , 则则这个工厂就变成了简单工厂

3. 多个工厂类的工厂模式
    相比于工厂模式 , 当工厂接口下有多个工厂实现类 , 每个工厂实现类负责实例化一个对象的时 (有多个平行于HumanFacctory的工厂类) , 就成为  
    了多个工厂的工厂模式

4. 抽象工厂
   (1) 一组相关联的对象中 , 有两种层次的业务区别 
   (2) 用工厂类实例化对象时 , 把一种业务区作为工厂实现类的分类, 另一种作为工厂接口方法的分类

eg :
       |
男人|    .                    .                           男女 , 黑白肤色是两组业务区别, 
       |                                                            黑白 : createWhite(), createBlack()
女人|    .                    .                                   男女 : ManFactory,  WomanFactory类
       |_____________________
           黑色           白色

a) 开始的黑人,白人不再满足业务需求 , 对象分成了白男,白女, 黑男,黑女 , 于是白人, 黑人成为了抽象类实现Human接口, 4种人种成为了真正的业务对象
b) 由于业务对象出现了两种层级的区别, 因此, 用工厂接口的不同创建对象方法区分对象大层级区别 , 用工厂实现类区分对象小层级差别

抽象工厂的设计, 实现了当构建对象的客户端代码的面向接口编程
public class Test {
public static void main(){
// HumanFactory接口,AbstractMan,AbstractWoMan抽象类
HumanFactory manFactory = new ManFactory();
HumanFactory womanFactory = new WomanFactory();

AbstractMan wm = manFactory.createWhite();
AbstractWoMan bm = womanFactory.createBlack();
}
}


0 0
原创粉丝点击