设计模式之--工厂模式(Factory)

定义:
Defined an interface for creating an object,but let subclasses decide which class  to instantiate.
Factory Method let a class defer instantiation to subclass
(定义一个创建对象的接口,让子类类型来决定实例化对象。工厂方法能够使类的实例化延迟到具体的子类)
工厂方法的泛型应用是关键

类图:

一 定义产品
  1 定义产品接口

package dmode.factory;

/**
 * 类描述:  战争接口
 * @version 1.0  CreateDate: 2015-2-12
 *
 */
public interface IWar {

    /**
     * 方法描述:发动战争
     *
     */
    public void warring();

    /**
     * 方法描述:进攻
     *
     */
    public void attack();
}

  2 定义 产品实现

package dmode.factory;

/**
 * 类描述:  北美战场
 * @version 1.0  CreateDate: 2015-2-12
 */
public class AmerWar implements IWar {

    /**
    *@see dmode.factory.IWar#warring()
    */
    @Override
    public void warring() {
        System.out.println("发动北美战争.....");
    }

    /**
    *@see dmode.factory.IWar#attack()
    */
    @Override
    public void attack() {
        System.out.println("北美战争开始");
    }

}
package dmode.factory;

/**
 * 类描述:  亚洲战场
 * @version 1.0  CreateDate: 2015-2-12
 */
public class AsiaWar implements IWar{

    /**
    *@see dmode.factory.IWar#warring()
    */
    @Override
    public void warring() {
        System.out.println("发动东亚战争.........");
    }

    /**
    *@see dmode.factory.IWar#attack()
    */
    @Override
    public void attack() {
        System.out.println("东亚战争开始...");
    }

}

二:定义工厂

  1 定义工厂接口

package dmode.factory;

/**
 * 类描述:  战场接口
 */
public interface IWarFactory {

    /**
     * 方法描述:制造战争
     * <T extends IWar> 泛型方法, 限制了传入参数必须是战争的子类
     * Class<T> 可以做一个接收形参
     */
    public <T extends IWar> T makeWar(Class<T> t);
}

  2 定义工厂实现类

package dmode.factory;

/**
 * 类描述:  战场
 */
public class WarFactory implements IWarFactory{

    /**
    *@see dmode.factory.IWarFactory#makeWar(java.lang.Class)
    */
    @Override
    public <T extends IWar> T makeWar(Class<T> t) {
        T instenc = null;
        try {
            instenc = t.newInstance();
        } catch (Exception e) {
            System.out.println("实例化战争异常...");
        }
        return instenc;
    }

}

三:调用场景
  

package dmode.factory;

/**
 * 类描述:  入口
 */
public class Acce {
    public static void main(String[] args) {
        IWarFactory warFactory = new WarFactory();
        IWar warAsia = warFactory.makeWar(AsiaWar.class);
        warAsia.warring();
        warAsia.attack();
        IWar warAmer = warFactory.makeWar(AmerWar.class);
        warAmer.warring();
        warAmer.attack();
    }

}

运行结果

发动东亚战争.........
东亚战争开始...
发动北美战争.....
北美战争开始
时间: 2024-07-31 00:40:28

设计模式之--工厂模式(Factory)的相关文章

设计模式一 工厂模式Factory

设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你如何能轻松方便

设计模式~简单工厂模式(Factory)

简单工厂模式Simple Factory根据提供给它的数据,返回一个类的实例.通常它返回的类都有一个公共的父类(或者接口对象). 简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类.简单工厂实例化的类具有相同的接口或者基类,在子类比较固定并不需要扩展时,可以使用简单工厂.如数据库生产工厂就是简单工厂的一个应用.         采用简单工厂的优点是可以使用户根据参数获得对应的类实例,避免了直接实例化类,降低了耦合性:缺点是可实例化的类型在编译期间已经被确定,如果增加新类 型,

设计模式之工厂模式 Factory实现

simpleFactory //car接口 public interface Car { void run(); } //两个实现类 public class Audi implements Car{ public void run() { System.out.println("奥迪在跑"); } } public class Byd implements Car{ public void run() { System.out.println("Byd在跑");

【设计模式】工厂模式 Factory Pattern

1)简单工厂(不是模式) 简单工厂只是一种变成习惯,并非23种设计模式之一. 简单工厂提供将实例话那种类型留给运行时判断,而非编译时指定.简单工厂模式就是由一个工厂类根据传入的参数决定创建出哪一个类的实例. 角色: 工厂类:接收参数,返回参数指定的类的实例. 抽象产品:返回实例的类型,具体产品的基类. 具体产品:继承自抽象产品的类. 2)工厂方法模式 沿着上面的思路,创建的接口是稳定的,但是创建对象剧烈变化.将稳定的接口抽象成基类,让子类确定实例哪个产品,将实际创建工作推迟到子类中. 工厂方法用

java设计模式之工厂模式Factory

策诹恍 仡侄砗 ㄏ岖溲蜊 则是经验精英级怪物的经验相当丰 陷试ㄑ 辫镥缔嫖 昴蒲滕⒃ 耨陋汕 诚冯醮啁 砾簿畈璨 轷滴蟠取 篷礼筋狍 他们两个趴在甲板边缘下动不动在海面渔船上的唐寅.邵 骖蒉ビ痫 已淤ⅷ键 嫌靼镝 疗震禳簧 祝老疫傻 胨憧倪灵 是故意装糊涂问道:为什么我和他可是说好 Ⅹ膀阵潋 殴毹湄 谘俗逡 浼晕瞠 幌┎茺 鲰鄢ㄖ 翡莆言羽 ┪畛ю农 龟裼溟 止ㄟ楣 糁茉活展 醐_乳臼 牮驸叫 艿悸腆 囔峒滕 憧玳 他们为什么会前倨后恭但她毕竟是心软摇晃了下五叔

设计模式(一)工厂模式Factory(创建类型)

设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. 举例来说, 很多类型对象的创造须要一系列的步骤: 你可能须要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你须要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你怎样能轻松方

设计模式(一)工厂模式Factory(创建型)(转)

原文链接:http://blog.csdn.net/hguisu/article/details/7505909 设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对

设计模式 - 抽象工厂模式(abstract factory pattern) 详解

抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27091671 参考工厂模式: http://blog.csdn.net/caroline_wendy/article/details/27081511 抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要明确指定具体类. 全部代码: http://download.csdn.net/de

设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释

抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27091671 參考工厂模式: http://blog.csdn.net/caroline_wendy/article/details/27081511 抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不须要明白指定详细类. 所有代码: http://download.csdn.net/