zoukankan      html  css  js  c++  java
  • Java模式—简单工厂模式

    简单工厂模式:是由一个工厂对象决定创建出哪一种产品类的实例,简单工厂模式是工厂模式家族中最简单实用的模式。

    目的:为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

    它的组成:

             1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。

             2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。

             3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。

    以一个工厂生产电视和手机为例进行解释:

    首先定义分别定义两个类代表电视和手机,并且都实现了work接口

     1 interface work{
     2     public void working();
     3 }
     4 class Phone implements work{
     5 
     6     @Override
     7     public void working() {
     8         System.out.println("生产手机");
     9     }
    10     
    11 }
    12 class Tv implements work{
    13 
    14     @Override
    15     public void working() {
    16         System.out.println("生产电视");
    17     }
    18     
    19 }

    接着如果想使用这两个类,可以用普通创建对象的方法

     1 public class Test10 {
     2 
     3     public static void main(String[] args) {
     4         Phone phone=new Phone();
     5         phone.working();
     6         
     7         Tv tv=new Tv();
     8         tv.working();
     9     }
    10 
    11 }

          这样使用的不好处就是,如果Phone类和TV类一旦改变,就得改变上述代码,可以说类Test10依赖于Phone类和TV类,称这种依赖为耦合:使用者直接使用了具体类,表示当前类依赖该具体类。这样当这个具体类发生变化,使用者将受到影响。

    为了降低这种影响,引入工厂模式:

    增加一个工厂类

     1 class Factory{
     2     public static Work getWork(String product){
     3         if("phone".equals(product)){
     4             return new Phone();
     5         }else if("tv".equals(product)){
     6             return new Tv();
     7         }
     8         return null;
     9     }
    10 }

    这样Test10类的代码就可以为:

     1 public class Test10 {
     2 
     3     public static void main(String[] args) {
     4         //依赖接口
     5         Work work=Factory.getWork("tv");
     6         if(work!=null){
     7             work.working();
     8         }
     9     }
    10 
    11 }

    这样它由依赖一个具体类转化为依赖接口,降低了耦合,体现了面向接口编程的思想。

    这样具体类的变化不会影响到它。

    这样写代码虽说和上述结果一样,但是可扩展性增强,维护性更强。

    ————————————————————————欢迎各位博友指出不足之处,多多交流。

  • 相关阅读:
    chaos —— 混沌
    《菊与刀》original 的阅读
    《菊与刀》original 的阅读
    十六进制(二进制)编辑器
    十六进制(二进制)编辑器
    Hopfield 神经网络及稳态性的证明
    Hopfield 神经网络及稳态性的证明
    OpenGL(一)绘制圆、五角星、正弦曲线
    NYOJ 8 一种排序(comparator排序)
    oc 第五天(内存管理)
  • 原文地址:https://www.cnblogs.com/chenxing818/p/4684573.html
Copyright © 2011-2022 走看看