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();
    		
    	}
    }
    


  • 相关阅读:
    有点忙啊
    什么是协程
    HDU 1110 Equipment Box (判断一个大矩形里面能不能放小矩形)
    HDU 1155 Bungee Jumping(物理题,动能公式,弹性势能公式,重力势能公式)
    HDU 1210 Eddy's 洗牌问题(找规律,数学)
    HDU1214 圆桌会议(找规律,数学)
    HDU1215 七夕节(模拟 数学)
    HDU 1216 Assistance Required(暴力打表)
    HDU 1220 Cube(数学,找规律)
    HDU 1221 Rectangle and Circle(判断圆和矩形是不是相交)
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10000546.html
Copyright © 2011-2022 走看看