美文网首页
工厂模式

工厂模式

作者: 风水里游 | 来源:发表于2016-07-18 22:42 被阅读20次

    title: 工厂模式
    date: 2016-6-12
    tags: 编程
    toc: true
    categories: 设计模式


    工厂模式的定义

    工厂模式叫虚拟构造,多态工厂,工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一个类
    用UML的类图如下;看附件
    工厂方法创建对象的接口,工厂方法把实例推迟到子类
    为了更好的理解工厂模式,我举一个例子,在一个在一个医院里有不同的科室,创建一个医院接口,实现两个不同的科室实现医院的接口,方法是创建新的对象,就是创建不同的医生对象,然后再创建一个医生接口,实现不一样的医生,在工厂中创建,然后就可以降低对象和对象之间的耦合度,提高了系统的灵活性。可以通过工厂方法调用不同医生的调度。

    工厂模式的优势

    应用程序的实例对象都放在一个地方来进行创建,利于对对象的管理和规划,对传值的操作有统一的规划
    在不修改应用程序其他类和参数的情况下类和对象,并对应用程序的持久性有更好的维护和升级
    工厂模式的使用场景
    1.一个系统应当不依赖于产品类实例被创立,就是实例的改变并不影响其他实例的使用。
    2.这个系统的产品很多的时候,不知道该调用哪一个实例。应该考虑使用工厂模式
    3.同属于一个实例,应该考虑不同的影响,从而减少依赖
    4.不同的产品以一系列的接口的面貌出现,从而使系统不依赖于接口实现,从而很好地去恪守接口隔离的原则。
    例子:
    把三好学生的描述作为例子

    $ 首先创建班级接口
    

    public interface IClassFactory {
    IStudent CreateStudent();
    }

    $ 然后创建实现班级接口类
    

    /*
    @author lxh

    1.public class IClassOneFactory implements IClassFactory {
    @Override
    public IStudent CreateStudent() {
    // TODO Auto-generated method stub
    return new Student1();
    }
    }

    public class IClassTwoFactory implements IClassFactory {
    @Override
    public IStudent CreateStudent() {
    // TODO Auto-generated method stub
    return new Student2();
    }
    }
    创建接口ISudent
    public interface IStudent {
    public int SkillOne();
    public void SkillTwo();
    public void Industry();
    }
    创建实现类
    public class Student1 implements IStudent {
    @Override
    public int SkillOne() {
    // TODO Auto-generated method stub
    int ss=11;
    System.out.println(“刻苦勤奋,勇于创新”);
    return ss;
    }
    @Override
    public void SkillTwo() {
    // TODO Auto-generated method stub
    System.out.println(“学习努力,有上进心”);
    }
    @Override
    public void Industry() {
    // TODO Auto-generated method stub
    System.out.println(“吃苦,勤劳勇敢”);
    }
    public String toString(Object String){
    String s=”优点1:”+this.SkillOne();
    return s;
    }
    }
    学生2:。。。
    创建测试类
    /**
    工厂模式

    @author lxh

    public class ClientTest {
    /**

    工厂方法模式实现时,客户端需要决定实例化那个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。
    你想要加的功能,本来是改工厂类的,而现在是修改客户端。

    public static void main(String[] args) {
    System.out.println(“学生1:”);
    IClassFactory factory=new IClassOneFactory();
    IStudent becility=factory.CreateStudent();
    becility.SkillOne();
    becility.SkillTwo();
    //becility.Industry();
    System.out.println("学生2:");
    IClassFactory factory2=new IClassTwoFactory();
    IStudent industry=factory2.CreateStudent();
    // industry.SkillOne();
    // industry.SkillTwo();
    industry.Industry();
    }
    }
    结果:
    学生1:
    刻苦勤奋,勇于创新
    学习努力,有上进心
    学生2:
    任劳任怨,是个好学生

    总结

    通过这个学习,对工厂模式的创建和实现有进一步的实现,对设计模式的简洁与应用的场景有更好的了解,在实践中应用生活的例子,让学习更有感觉。发现生活中的美才是学习的最好的诠释。
    应用:
    javaweb设计模式之道

    相关文章

      网友评论

          本文标题:工厂模式

          本文链接:https://www.haomeiwen.com/subject/ltkmjttx.html