zoukankan      html  css  js  c++  java
  • 设计模式之简单工厂模式

    单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其它类的实例,被创建的实例通常都具有共同的父类。

    1.工厂(Creator)角色 简单工厂模式的核心,它负责实现创建全部实例的内部逻辑。工厂类能够被外界直接调用。创建所需的产品对象。
    2.抽象(Product)角色 简单工厂模式所创建的全部对象的父类,它负责描写叙述全部实例所共同拥有的公共接口


    3.详细产品(Concrete Product)角色 简单工厂模式所创建的详细实例对象

    优缺点:

    在这个模式中。工厂类是整个模式的关键所在。它包括必要的推断
    逻辑,能够依据外界给定的信息,决定到底应该创建哪个详细类的
    对象。

    用户在使用时能够直接依据工厂类去创建所需的实例,而无
    需了解这些对象是怎样创建以及怎样组织的。有利于整个软件体系
    结构的优化。
    不难发现,简单工厂模式的缺点也正体如今其工厂类上,因为工厂类集中
    了全部实例的创建逻辑。所以“高内聚”方面做的并不好。另外,当系统中的
    详细产品类不断增多时,可能会出现要求工厂类也要做对应的改动,扩展
    性并不非常好。


    public class Apple implements Fruit{
    	/*
    	 * 採集
    	 */
    	public void get(){
    		System.out.println("採集苹果");
    	}
    }
    

    public class Banana implements Fruit{
    	
    	public void get(){
    		System.out.println("採集香蕉");
    	} 
    
    
    
    
    public class FruitFactory {
    //	/*
    //	 * 获得Apple类的实例
    //	 */
    //	public static  Fruit getApple() {
    //		return new Apple();
    //	}
    //	
    //	/*
    //	 * 获得Banana类实例
    //	 */
    //	public static Fruit getBanana() {
    //		return new Banana();
    //	}
    	/*
    	 * get方法,获得全部产品对象
    	 */
    	public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
    //		if(type.equalsIgnoreCase("apple")) {
    //			return Apple.class.newInstance();
    //			
    //		} else if(type.equalsIgnoreCase("banana")) {
    //			return Banana.class.newInstance();
    //		} else {
    //			System.out.println("找不到对应的实例化类");
    //			return null;
    //		}
    			Class fruit = Class.forName(type);
    			return (Fruit) fruit.newInstance();
    		
    		
    	}
    }
    

    }
    
    
    public interface Fruit {
    	/*
    	 * 採集
    	 */
    	public void get();
    }
    


    public class MainClass {
    	public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
    //		//实例化一个Apple
    //		Apple apple = new Apple();
    //		//实例化一个Banana
    //		Banana banana = new Banana();
    //		
    //		apple.get();
    //		banana.get();
    		
    //		//实例化一个Apple,用到了多态
    //		Fruit apple = new Apple();
    //		Fruit banana = new Banana();
    //		apple.get();
    //		banana.get();
    		
    //		//实例化一个Apple
    //		Fruit apple = FruitFactory.getApple();
    //		Fruit banana = FruitFactory.getBanana();
    //		apple.get();
    //		banana.get();
    		
    		Fruit apple = FruitFactory.getFruit("Apple");
    		Fruit banana = FruitFactory.getFruit("Banana");
    		apple.get();
    		banana.get();
    		
    	}
    }
    


  • 相关阅读:
    OpenCL、CUDA
    最小和最廉价的超级计算机,DIY的
    组装属于您自己的Tesla个人超级计算机
    多处理器系统
    开源项目Spark简介
    基于Cassandra的日志和分布式小文件存储系统【1】
    网络广告js备忘【2】
    网络广告js备忘【1】
    成功产品的意外
    Cassandra HBase和MongoDb性能比较
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10000546.html
Copyright © 2011-2022 走看看