• 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 }

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

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

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

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

  • 相关阅读:
    CSS——制作天天生鲜主页
    HTML——制作一个图片列表
    HTML——制作一个简易菜单栏
    CSS——三种页面引入方法
    【20170903】模拟赛
    【LA 3942】 Remember the word
    【BZOJ 1036】 树的统计count
    UVA 12299 RMQ with shifts
    【20170706】次短路
    【20170706】保卫萝卜
  • 原文地址:https://www.cnblogs.com/chenxing818/p/4684573.html
Copyright © 2020-2023  润新知