zoukankan      html  css  js  c++  java
  • (一)简单工厂模式

    (一)简单工厂模式

    作者:林子
    时间:2014年8月
    出处:http://blog.csdn.net/u013011841
    声明:欢迎指出错误


    1、为什么学习设计模式?

           设计模式(Design pattern)是一套被重复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更easy被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的。设计模式使代码编制真正project化。设计模式是软件project的基石脉络。如同大厦的结构一样。

    2、为什么第一个学习简单工厂?

          简单工厂(Simple Factory)是类的创建者,又叫静态工厂方法(Static Factory Method)。简单工厂是由一个工厂对象决定创建出纳一种产品类的实例。

    第一个学习简单工厂是由于这是最主要的创建模式。学习好简单工厂有利于我们学好工厂方法。

     

    3、简单工厂的引进

    我们以农场公司为样例,专门向市场销售各类水果。在这个系统里面须要描写叙述下列水果

    • 葡萄Grape
    • 草莓Strawberry
    • 苹果Apple

    水果和其它的植物有非常大的不同。水果终于是能够食用的。

    那么一个自然的做法就是就是建立一个各种水果都适用的接口,以便和农场里的其它植物区分开来。


    水果的接口(interface)规定全部的水果必须实现的接口,包含不论什么水果必须具备的方法。

    PS: 不知道什么是接口的去看Java教材,接口就是Fruit的抽象方法,类似C++的虚函数

     

    水果接口的源码:


    Public interface Fruit
    {
       //生长
       void grow();
    
       //收获
       void harvest();
    
       //种植
       void plant();
    }

    描写叙述苹果类的类图例如以下



    Apple类是水果类的一种,因此它实现了水果接口所声明的全部方法。另外,因为苹果是多年生的植物。因此多出一个treeAge性质,用来描写叙述苹果树的年龄。


    public class Apple implements Fruit
    {
       private int treeAge;
    
       //生长
       public void grow()
       {
           log(“Apple if growing...”);
       }
    
       //收获
       public void harvest()
       {
           log(“Apple has been harvest.”)
       }
    
       //种植
       public void plant()
       {
           log(“Apple has been planted.”)
       }
    
       //辅助方法
       public static log(String msg)
       {
           System.out.println(msg);
       }
    
       //树龄取值方法
       public int getTreeAge()
       {
           return treeAge;
       }
    
       //树龄的赋值方法
       public int setTreeAge(int treeAge)
       {
           this.treeAge=treeAge;
       }
    
    }

    葡萄和草莓类和苹果类类似,这里就不一一给出了。

     

    农场的园丁(在这里作为简单工厂)也是系统的一部分。自然要由一个合适的类来代表。这个类就是FruitGardener类,其结构如图所看到的




    FruitGardener会依据client的要求,创建出不同的水果对象,如苹果(Apple).

    园丁类的代码例如以下


    public class FruitGardener
    {
    //简单工厂
       public static Fruit factory(String which)
       {
          if(which.equalsIgnoreCase(“Apple”))
          {
              return new Apple;
          }
          if(which.equalsIgnoreCase(“strawberry”))
          {
             return new strawberry;
          }
    
          if(which.equalsIgnoreCase(“grape”))
          {
            return new grape;
          } 
    
       }
    }

    4、简单工厂的结构

    简单工厂涉及到工厂角色、抽象产品角色和详细产品角色等三个角色:

    • 工厂类(Creator):担任这个角色的是简单工厂的核心,含有与应用紧密相关的逻辑。工厂类在调用下创建产品对象。
    • 抽象产品(Product):担任这个角色的类是由简单工厂所创建的对象的父类。或者他们拥有共同的接口。
    • 详细产品(Concrete Product):简单工厂所创建的不论什么对象都是这个角色的实例。


    工厂类源码


    public class Creator
    {
       //简单工厂
       public static Product factory()
       {
           return new ConcreteProduct();
       }
    }

    抽象产品源码


    public interface Product 
    {
    }

    详细产品


    public class ConcreteProduct implements Product
    {
       public ConcreteProduct(){}
    }



  • 相关阅读:
    体温填报APP--流程设计
    构建之法阅读笔记(一)
    家庭记账本(七)
    家庭记账本(六)
    家庭记账本(五)
    家庭记账本(四)
    家庭记账本(三)
    家庭记账本(二)
    家庭记账本(一)
    20210207 BaseAdapter
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7061503.html
Copyright © 2011-2022 走看看