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

      工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

      工厂模式有两种形式:工厂方法和抽象工厂。它们的意图是一样的:提供一个接口,在不指定具体类的情况下,创建相关或者依赖的对象。

    使用普通代码实现工厂模式

     1 package com;
     2 interface Fruit {
     3     public abstract void eat();
     4 }
     5 class Apple implements Fruit {
     6     public void eat() {
     7         System.out.println("吃苹果");
     8     }
     9 }
    10 class Orange implements Fruit {
    11     public void eat() {
    12         System.out.println("吃橘子");
    13     }
    14 }
    15 class Factory {
    16     //根据水果的名字,得到对应的水果
    17     public static Fruit getInstance(String fruitName) {
    18         Fruit f = null;
    19         if("Apple".equals(fruitName)){
    20             f = new Apple();
    21         }else if("Orange".equals(fruitName)){
    22             f = new Orange();
    23         }
    24         return f;
    25     }
    26 }
    27 public class Test {    
    28     public static void main(String[] args){
    29         Fruit f = Factory.getInstance("Apple");
    30         f.eat();
    31         f = Factory.getInstance("Orange");
    32         f.eat();
    33     }
    34 }

    将反射机制应用于工厂模式

     1 package com;
     2 interface Fruit {
     3     public abstract void eat();
     4 }
     5 class Apple implements Fruit {
     6     public void eat() {
     7         System.out.println("吃苹果");
     8     }
     9 }
    10 class Orange implements Fruit {
    11     public void eat() {
    12         System.out.println("吃橘子");
    13     }
    14 }
    15 class Factory {
    16     //参数为包名+类名,根据这个路径可以获取到对应的类
    17     public static Fruit getInstance(String ClassName) {
    18         Fruit f = null;
    19         try {
    20             f = (Fruit) Class.forName(ClassName).newInstance();
    21         } catch (Exception e) {
    22             e.printStackTrace();
    23         }
    24         return f;
    25     }
    26 }
    27 public class Test {    
    28     public static void main(String[] args){
    29         Fruit f = Factory.getInstance("com.Apple");
    30         f.eat();
    31         f = Factory.getInstance("com.Orange");
    32         f.eat();
    33     }
    34 }
  • 相关阅读:
    "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no freetype in java.library.path
    Cookie的简单使用
    转发与重定向
    JSON 在Ajax数据交换中的简单运用
    Word/Excel/PPT 2016商务办公从入门到精通
    高性能MySQL(第3版)
    精通CFD工程仿真与案例实战 FLUENT GAMBIT ICEM CFD Tecplot 第2版
    HTML、CSS和JavaScript入门经典(第2版)
    C#图解教程(第4版)
    巧学巧用DreamweaverCS6、FlashCS6、FireworksCS6网站制作
  • 原文地址:https://www.cnblogs.com/acm-bingzi/p/factory.html
Copyright © 2011-2022 走看看