zoukankan      html  css  js  c++  java
  • 设计模式(二)工厂方法(创建型)

    简单工厂模式 和 工厂方法模式 的区别

    简单工厂模式

    1

    • 工厂方法模式

    2

    比较这两个结构图,我们会发现,每个结构图右侧的红色边框内有很大的区别,前者的简单工厂没有子类,只有一些逻辑判断代码;而后者却又重新分出四个具体的工厂。到这里,两种模式的区别之一就出来了。那么,工厂方法模式中的逻辑判断代码在哪里呢?答案是:客户端。因为,在前一种模式中,要想修改添加功能就必须在工厂类中进行修改,而后者是修改客户端。

    联系:

    都有运算类、客户端,其中运算类都有相应的子类。

    区别:

    最明显:工厂方法模式需要有一个工厂接口。

    其次,工厂方法模式关于工厂类处是具体的工厂而不是一个简单的工厂类。

    最后,添加功能时,前者改动的是工厂类(为工厂类添加相关功能的子类),后者改动的是客户端(为相应功能增加判断逻辑的代码)。

    用实例(计算器)说明就是:

    (1)都有运算类(包括加减乘除四个子类)、都需要一个客户端

    (2)工厂方法模式中的工厂类处,产生与运算类的子类相对应的四个具体的工厂:加法工厂、减法工厂、乘法工厂和除法工厂

    (3)代码中要构建一个工厂接口,然后四个具体工厂去实现这个接口

    代码说明一切 

    //Animal .java
    public abstract class Animal {
        public abstract void sleep();
    }
    //AnimalFactory .java
    
    public interface AnimalFactory {
        public Animal createAnimal();
    }
    //Dog.java
    
    public class Dog extends Animal {
    
        @Override
        public void sleep() {
            System.out.println("dog sleep");
    
        }
    
    }
    //DogFactory .java
    
    public class DogFactory implements AnimalFactory{
    
        @Override
        public Animal createAnimal() {
            return new Dog();
        }
    
    
    }
    public class AnimalTest {
        
        public static void main(String[] args) {
            AnimalFactory af = null;
            af =  new DogFactory();
            Animal dog = af.createAnimal();
            dog.sleep();
            
            AnimalFactory af2 =new PigFactory();
            Animal pig = af2.createAnimal();
            pig.sleep();
            
            AnimalFactory af3 = new DogFactory();
            Animal a = af3.createAnimal();
            a.sleep();
            af3 = new PigFactory();
            a = af3.createAnimal();
            a.sleep();
    
        }
    
    }

    工厂方法模式与简单工厂模式在结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。
        工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。 当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了“开放-封闭”原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。

       工厂方法模式退化后可以演变成简单工厂模式。 

    我是天王盖地虎的分割线                                                                 

    源代码:http://pan.baidu.com/s/1dD1Qx01

    java工厂.zip

    转载请注明出处:http://www.cnblogs.com/yydcdut

  • 相关阅读:
    linux服务器安全配置攻略
    Linux服务器调优
    Tengine + Lua + GraphicsMagick 实现图片自动裁剪/缩放
    nginx缓存设置
    动态缓存技术之CSI,SSI,ESI
    ionic环境配置
    Node.js企业开发:应用场景
    HashMap实现原理、核心概念、关键问题的总结
    《Windows核心编程》读书笔记.Chapter06线程基础
    开发环境eclipse for Mac 下的常用快捷键汇总(基本参照Win系,将Ctrl换为Command)
  • 原文地址:https://www.cnblogs.com/yydcdut/p/3838474.html
Copyright © 2011-2022 走看看