zoukankan      html  css  js  c++  java
  • 单例模式工厂模式

    单例模式

    单例模式的目的就是为了控制特定的类只产生一个对象。

    产生单例的步骤:

    1、构造方法私有化(在构造方法前面加prevate static finall)为的是不让其他类创建该类的实例化对象。

    2、在类中自己创建自己的实例化对象。

    3、写一个方法,返回该实例化对象。

    4、在该类中还可以写其他的方法。

    具体的代码如下:

    public class Danli

    {

        // 构造方法私有化,让其他类调用不到

        private Danli()

        {

        }

        // 在类中自己创建自己的实例化对象,

        private static final Danli danli = new Danli();

    // 写一个方法,可以返回该唯一单例的实例化对象

    //注意一定要加static不然其他的类中调用不到该方法,也就创建不到实例化对象

        Public static Danli getDanli()

        {

    return danli;

        }

        // 在单例的类中写其他的方法,一般是其他类共享的数据

        public static void doSomething()

        {

    System.out.println("这是单例");

        }

    }

    Java中使用单例的优势:

    1、减少Java中因为创建实例所带来的开销。

    2、便于系统跟踪单个Java实例的生命周期和实例状态。

    Java单例运用的场景

    1、要求生成唯一序列号的环境

    2、在整个项目中需要一个共享访问点,或者共享访问数据

    3、需要定义大量的静态常量和静态方法(如工具类)的环境

    4、创建一个对象需要消耗的资源过多,如要访问IO(输入流)和数据库资源

    工厂模式

    工厂模式主要是为创建对象提供过渡接口,以便将创建对象的过程屏蔽起来达到提高灵活性的目的。

    简单工厂模式

    简单工厂模式又称为静态工厂模式,它属于创建型模式。主要是根据传入的变量的不同返回不同类型的实例化对象。被创建的类通常都有共同的父类或者是实现了共同的接口。

    简单工厂模式的组成:

    1、工厂类(factory):由具体的Java类实现,该类根据参数的不同创建不同的实例化对象。

    2、抽象产品(product):一般是有factory创建的具体的实体类的父类或者是他们共同实现的接口。

    3、具体的产品(factory product):factory具体要创建的实体类。

    例子:利用简单工厂模式描述果园系统;抽象出的类包括:【1抽象产品fruit】【2具体产品apple树,grapestrawBerry树】【工厂类 园丁gardener种树】

    具体的代码如下:

    1抽象产品fruit

    /**

     * 接口里面写水果类必备的方法:种植plant();成长grow();和丰收harvest();

     */

    public interface Fruit

    {

        public void plant();

        public void grow();

        public void harvest();

    }

    2具体产品apple树,grapestrawBerry树】

    public class Apple implements Fruit

    {

        @Override

        public void plant()

        {

    // TODO Auto-generated method stub

    System.out.println("种苹果树");

        }

        @Override

        public void grow()

        {

    // TODO Auto-generated method stub

    System.out.println("苹果树在成长");

        }

        @Override

        public void harvest()

        {

    // TODO Auto-generated method stub

    System.out.println("收苹果");

        }

    }

    工厂类 园丁gardener种树】

    /**

     * gardenner负责创建具体的实例化对象

     */

    public class Gardener

    {

        // 写一个方法,返回值是具体要创建的对象的父类,或者是他们共同实现的接口

        public Fruit factory(String fruitName)

        {

    if ("apple".equals(fruitName))

    {

        return new Apple();

    }

    else if ("grape".equals(fruitName))

    {

        return new Grape();

    }

    else if ("strawberry".equals(fruitName))

    {

        return new StrawBerry();

    }

    else

    {

        System.out.println("输入的名字不正确");

        return null;

    }

        }

    }

    测试

    public class Test

    {

        public static void main(String[] args)

        {

    // 实例化工厂对象

    Gardener gardener = new Gardener();

    // 创建苹果树

    Fruit apple = gardener.factory("apple");

    apple.plant();

    apple.grow();

    apple.harvest();

    // 创建葡萄树,并调用里面的在成长方法

    Fruit f1 = gardener.factory("grape");

    f1.grow();

    // 创建葡萄树,并调用里面的在成长方法

    Fruit f2 = gardener.factory("grape");

    f2.grow();

    // 创建树用的不是单例,所以f1 != f2

    System.out.println(f1 != f2);

        }

    }

    简单工厂模式使用的环境:

    1、工厂类负责创建的对象那个比较少

    2、客户只知道传入工厂类的方法,对于如何创建对象则不关心

    工厂方法模式

    工厂方法模式在简单工厂模式的基础上添加了抽象工厂,这样就可以在对不同的产品使用不同的工厂。

    工厂方法模式的组成

    1、抽象工厂角色:工厂的实体类抽象出来的接口,或者他们共同继承的父类

    2、具体工厂角色:里面写具体的业务逻辑相关的代码

    3、抽象产品角色:具体的产品共同继承的父类或者实现的接口,负责定义产品的共性,实现对事物的最抽象的定义。

    4、具体的产品角色:具体的工厂所创建的对象。在Java中由具体的类实现

    工厂方法模式的结构图

    工厂方法模式使用的场景:

    1、一个类不知道他需要的对象的类

    2、一个类通过其子类制定创建哪个对象

    对于抽象工厂类只需要提供一个创建产品的接口,而又其子类确定具体要创建的对象。在程序运行时,子类对象将覆盖父类对象,从而使系统共容易扩展。

    将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以不用关心是哪一个工厂子类在创建产品子类,需要时在动态指定,可以将具体的工厂类的类名储存在配置文件中或者数据库中。

  • 相关阅读:
    创建类以及引用一个类
    修改hosts文件
    微信第三方登录接口开发
    Android定位
    Leetcode 102. Binary Tree Level Order Traversal
    Leetcode 725. Split Linked List in Parts
    Leetcode 445. Add Two Numbers II
    Leetcode 328. Odd Even Linked List
    Leetcode 237. Delete Node in a Linked List
    Leetcode 234. Palindrome Linked List
  • 原文地址:https://www.cnblogs.com/weyine/p/7257165.html
Copyright © 2011-2022 走看看